2012-01-27 2 views
0

У меня есть окно с scrollviewer в scrollviewer - это коллекция usecontrols, которая может быть от полного пустого до бесконечности. Я хочу, чтобы высота окна для установки на высоту экрана так, чтобы он не переполнения, и я хотел бы, если нет коды позади используется, потому что я использую шаблон MVVM ..Динамическая высота с scrollviewer

Благодаря

<Window x:Class="FreePIE.GUI.Shells.CurveSettingsView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="CurveSettingsView" Background="{DynamicResource WindowBackgroundBrush}" SizeToContent="WidthAndHeight" MinHeight="200" MinWidth="200"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <ScrollViewer> 
      <ItemsControl x:Name="Curves" Grid.Row="0"></ItemsControl> 
     </ScrollViewer> 
     <Button x:Name="AddCurve" Width="150" Grid.Row="1">Add new curve</Button> 
    </Grid> 
</Window> 

ответ

0

Если я вас правильно понял, вы хотите, чтобы ваши ItemsControl занять все свободное пространство, и размер его содержимое так, что ни ScrollViewer не требуется, чтобы увидеть все детали

Если это так, замените значение по умолчанию ItemsPanelTemplate в ваш ItemsControl с элементом управления, который растягивается, чтобы заняться всем свободным пространством, ч как DockPanel. По умолчанию ItemsPanelTemplate - это StackPanel, который будет расти как можно больше.

<ItemsControl x:Name="Curves" Grid.Row="0"> 

    <!-- ItemsPanelTemplate --> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <DockPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <!-- ItemContainerStyle --> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="DockPanel.Dock" Value="Top" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 

</ItemsControl> 

Если вы хотите, чтобы все пункты того же размера, я предложил бы использовать UniformGrid вместо DockPanel и связывания Rows свойство числа элементов в вашей коллекции. не

<ItemsControl x:Name="Curves" Grid.Row="0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Rows="{Binding 
       RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, 
       Path=Items.Count}" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+0

Извините, если я был немного неясно, нет я хочу, чтобы окно не занимать не более высоты экрана, если содержание ItemsControl делает окно больше, чем экран, то я хочу ScrollViewer к ограничьте видимую часть элементов управления, чтобы все окна были видны на экране, спасибо ... – Anders

Смежные вопросы