滚动查看器的动态高度

时间:2012-01-27 15:17:45

标签: wpf scrollviewer

我在scrollviewer中有一个带有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>

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望ItemsControl占用所有可用空间,并调整其内容的大小,以便不需要ScrollViewer来查看所有项目

如果是这种情况,请将ItemsPanelTemplate中的默认ItemsControl替换为占用所有可用空间的控件,例如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>