C# のデータ ソースにバインドされる GridView があります。ユーザーが水平方向にスクロールすると、より多くのデータが読み込まれます。
GridView.xaml から:
<GridView Grid.Row="1" x:Name="GridViewStories" ItemsPanel="{StaticResource GridViewVerticalTemplate}" IsSwipeEnabled="False" SelectionMode="None" IsItemClickEnabled="True" ItemClick="GridViewStories_ItemClick" IncrementalLoadingTrigger="Edge">
<GridView.ItemContainerTransitions>
<TransitionCollection />
</GridView.ItemContainerTransitions>
<GridView.ItemTemplate>
<DataTemplate>
<Image Source="{Binding SquareImageURL}" Margin="10" Width="240" Height="160" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
これは、スナップ ビューで ListView のように動作するようにします。つまり、水平方向ではなく垂直方向にスクロールする必要があります。この問題は別として、必要なものはすべて VisualStateManager で変更できました。
GridView.xaml から:
<VisualState x:Name="Snapped">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="StackPanelHeader" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="StackPanelHeaderSnapped" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="StackPanelHeaderPortrait" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="GridViewStories" Storyboard.TargetProperty="ItemsPanel">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource GridViewHorizontalTemplate}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
StandardStyles.xaml から:
<ItemsPanelTemplate x:Key="GridViewHorizontalTemplate">
<WrapGrid Orientation="Horizontal" HorizontalAlignment="Center" MaximumRowsOrColumns="1" />
</ItemsPanelTemplate>
GridView を Scrollviewer にラップしたくありません。これを行うと、使用している組み込みのインクリメンタル ローディングが中断されるためです。ListView を作成して、その表示と GridView の表示を切り替えるだけでよいことに気付きましたが、追加のコントロールにバインドして他の関連コードを複製する必要はありません。アイデア?