设置ListView以填充所有可用的垂直空间

时间:2013-02-02 21:53:50

标签: wpf xaml windows-8

我正在尝试使用顶行固定高度的设计,以及填充所有可用剩余空间的ListView。

ListView有一个大的ItemsSource,为了正确使用UI虚拟化,我读到需要指定高度。如果我将它设置为绝对值,它可以正常工作。但是,将其设置为“Stretch”似乎会渲染整个ListView(甚至关闭屏幕)。

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="200"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <ScrollViewer VerticalScrollMode="Enabled" Grid.Row="1">
        <ListView VerticalAlignment="Stretch"/>
    </ScrollViewer>
</Grid>

如何在不离开屏幕的情况下使ListView占用所有可用空间?

1 个答案:

答案 0 :(得分:2)

呈现整个ListView是因为您已将其放在ScrollViewer内。独立的ScrollViewer对虚拟化一无所知,并且基本上告诉它的内容,它们有无限的空间来渲染自己。

因此,删除ScrollViewer,让ListView成为Grid的直接子项。 ListView有自己的内部ScrollViewer, 处理虚拟化,当ListView获取足够的项目来填充屏幕时,您应该看到它。

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="200"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>

    <ListView VerticalAlignment="Stretch" Grid.Row="1" />
</Grid>