3

私は、固定高さの一番上の行と、利用可能な残りのスペースをすべて埋める ListView を備えたデザインを作ろうとしています。

ListView には大きな ItemsSource があり、UI 仮想化を適切に使用するには、高さを指定する必要があることを読みました。絶対値に設定すると、正常に動作します。ただし、「ストレッチ」に設定すると、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 に答える