画面サイズに基づいて、コンパクト状態と展開状態の間でコントロールを切り替えようとしています。これを行うために、視覚的な状態を使用してコントロールのテンプレートを変更しています。
<UserControl>
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="CompactMenuTemplate" TargetType="HeaderedItemsControl">
<Border>
<StackPanel>
<Image icon-menu.png" Cursor="Hand"/>
<Popup>
<Border Background="Blue">
<ItemsPresenter />
</Border>
</Popup>
</StackPanel>
</Border>
</ControlTemplate>
<ControlTemplate x:Key="ExpandedMenuTemplate" TargetType="HeaderedItemsControl">
<StackPanel Orientation="Horizontal" IsItemsHost="True" />
</ControlTemplate>
</Grid.Resources>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ScreenSizeGroups">
<VisualState x:Name="Wide" />
<VisualState x:Name="Small">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="linkItems"
Storyboard.TargetProperty="Template">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{StaticResource CompactMenuTemplate}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<HeaderedItemsControl x:Name="linkItems"
Template="{StaticResource ExpandedMenuTemplate}">
<Button Content="link #1" />
<Button Content="link #2" />
<Button Content="link #3" />
</HeaderedItemsControl>
</Grid>
</UserControl>
これにより、InvalidOperationException
表示状態が変化したときに次のようになります。
この Freezable は凍結できません。
これを希望どおりに機能させるためのトリックはありますか、それとも別のアプローチを取る必要がありますか?