У меня есть очень простой элемент управления GridView, определенный на странице приложения Магазина Windows, который выглядит следующим образом:
<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
не размещается ни в какой другой области прокрутки или холсте.
Я опубликую свой обходной путь ниже, но я надеюсь, что у кого-то есть более удовлетворительный ответ.