我有一个带有 ItemPanel 的 GridView,如下所示:
<ItemsPanelTemplate x:Key="PanelTemplateLandscape">
<WrapGrid Orientation="Vertical" />
</ItemsPanelTemplate>
现在,如果应用程序将模式更改为“Snapped”,我想更改此 WrapGrid 的方向。一种方法是像这样创建第二个 ItemsPanelTemplate:
<ItemsPanelTemplate x:Key="PanelTemplatePortrait">
<WrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
然后使用 VisualStateManager 和 VisualState "Snapped" 来更改 ItemsPanel 模板,如下所示:
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="DataGrid" Storyboard.TargetProperty="ItemsPanel">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PanelTemplatePortrait}"/>
</ObjectAnimationUsingKeyFrames>
为了完整起见,这里是 GridView 标记:
<GridView x:Name="DataGrid" Grid.Row="1" ItemTemplate="{StaticResource Standard250x250ItemTemplate}" ItemsPanel="{StaticResource PanelTemplateLandscape}"
ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollMode="Auto" ScrollViewer.VerticalScrollMode="Auto">
</GridView>
然后我用 100 个项目填充了 GridView,在启动时,它看起来不错,并且有一个可以使用的水平滚动条。
现在如果我向左“对齐”,方向就会改变,现在有一个可以使用的垂直滚动条。
到目前为止一切都符合预期。
但是,如果我现在回到 FullscreenMode,方向会正确更改,但水平滚动条可见但不可用。如果我然后切换回快照视图,滚动条可见但不可用。
在运行时更改模板是否存在已知问题?有没有办法解决这个问题?用 VisualStateManager 更改模板有错吗?
谢谢你的帮助