Изменение ItemsPanelTemplate с помощью VisualStateManager отключает полосы прокрутки
У меня есть GridView с ItemPanel, как это:
<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>
Затем я заполнил GridView 100 элементами, и при запуске он выглядит хорошо и имеет горизонтальную полосу прокрутки, которую можно использовать.
Теперь, если я "щелкну" влево, ориентация изменится, и теперь появится вертикальная полоса прокрутки, которую можно использовать.
Пока все как и ожидалось.
Но если я сейчас вернусь к FullscreenMode, ориентация будет изменена правильно, но горизонтальная полоса прокрутки видна, но не используется. То же самое, если я затем переключаюсь обратно на Snapped View, полоса прокрутки видна, но не используется.
Известны ли проблемы с изменением шаблонов во время выполнения? Есть ли способы обойти эту проблему? Это неправильно, чтобы изменить шаблоны с VisualStateManager?
Спасибо за вашу помощь