3

我正在尝试设计一个顶行固定高度的设计,以及一个填充所有可用剩余空间的 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 在不离开屏幕的情况下占用所有可用空间?

4

1 回答 1

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>
于 2013-02-02T22:58:11.643 回答