次のような Windows ストア アプリ ページで定義された非常に基本的な GridView コントロールがあります。
<GridView
x:Name="myGridView"
Grid.RowSpan="2"
Padding="30,137,40,46"
ItemsSource="{Binding Source={StaticResource myItemsViewSource}}"
ItemTemplate="{StaticResource My500x500ItemTemplate}"
SelectionMode="Multiple"
IsSwipeEnabled="True"
IsItemClickEnabled="True">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Margin="1,0,0,6">
<Button
Style="{StaticResource TextPrimaryButtonStyle}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Title}" Margin="3,-7,10,10" Style="{StaticResource GroupHeaderTextStyle}" />
<TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" Style="{StaticResource GroupHeaderTextStyle}"/>
</StackPanel>
</Button>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</GridView.GroupStyle>
</GridView>
実行時に、期待どおりにバインドされたデータがコントロールにmyItemsViewSource
表示されます。GridView
ただし、画面に表示できるよりも多くのアイテムがデータ ソースにある場合、奇妙なスクロールの問題が発生します。スクロールバーは、コレクションをスクロールしようとする私の努力に「抵抗」しているようで、ビューポートが「自由になり」、残りのアイテムをスクロールできるようになるまで、ビューポートをわずかに移動します。
同じことが、右から左に戻るときにも起こります。スクロール領域の開始点に十分近づくまで、スクロールはスムーズに行われます。
問題が仮想化に関係していると考えて、ItemsPanel
のGridView
をStackPanel
ではなく に変更しようとしましVirtualizingStackPanel
たが、アイテムが表示されなくなるというさらに悪い影響がありました。注: はGridView
、他のスクロール領域またはキャンバスではホストされていません。
以下に回避策を投稿しますが、誰かがより満足のいく答えを持っていることを願っています。