【发布时间】:2026-02-10 20:35:01
【问题描述】:
我在 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 控件中。
但是,当数据源中的项目多于屏幕上显示的项目时,我遇到了一个奇怪的滚动问题。滚动条似乎“抗拒”了我滚动集合的努力,只是稍微移动了视口,直到它“脱离”并且我可以滚动浏览其余项目:
同样的事情发生在从右到左的路上:滚动顺利进行,直到我足够接近滚动区域的起点,它似乎又“粘”在了哪里:
考虑到问题与虚拟化有关,我尝试将 GridView 的 ItemsPanel 更改为 StackPanel 而不是 VirtualizingStackPanel,但这会产生更糟糕的效果,阻止任何从被显示的项目。注意:GridView 未托管在任何其他滚动区域或画布中。
我将在下面发布我的解决方法,但我希望有人能给出更令人满意的答案。
【问题讨论】:
-
我遇到了同样的问题。我认为问题出在计算错误的内部项目模板上。事实上,滚动条不仅具有粘性,而且还可以一寸一寸地调整大小。
标签: gridview padding winrt-xaml horizontal-scrolling sticky