2012-01-27 50 views
0

我在scrollviewer中有一个滚动查看器的窗口,它是一个可以非常从空到无穷的usecontrols集合。我想窗口的高度要安装到屏幕上,这样它不会溢出的高度,也是我想如果没有后面的代码的使用,因为我使用MVVM模式..使用滚动查看器的动态高度

感谢

<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带有可延伸占据所有可用空间的控件suc h作为DockPanel。默认ItemsPanelTemplateStackPanel,它将根据需要增长。

<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到限制itemscontrol的可见部分,以便所有的窗口都可以在屏幕上看到,谢谢... – Anders 2012-01-28 19:43:02