我有一个非常基础的GridView控件,在Windows Store应用程序页面中定义如下:
<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
控件中,就像我期望的那样。
然而,当数据源中的项目数量超过屏幕可显示的数量时,我遇到了一个奇怪的滚动问题。滚动条似乎会“阻力”我的滚动操作,并且只会轻微移动视口,直到它“突然解除”,我才能浏览其余的项目:
同样的情况也发生在从右到左的滚动过程中:滚动是平稳的,直到我接近滚动区域的起点,那里似乎又“卡住”了:
我认为这个问题与虚拟化有关,于是我尝试将GridView
的ItemsPanel
更改为StackPanel
而不是VirtualizingStackPanel
,但这会导致更糟糕的结果,因为没有任何项目被显示。注意:GridView
未托管在任何其他滚动区域或画布中。
我将在下面发布我的解决方法,但我希望有人能给出更令人满意的答案。