2

我有一个带有 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 更改模板有错吗?

谢谢你的帮助

4

0 回答 0