Изменение шаблона управления через визуальное состояние приводит к ошибке: "Этот Freezable не может быть заморожен"
Я пытаюсь переключить управление между компактным и расширенным состояниями в зависимости от размера экрана. Для этого я использую визуальные состояния, чтобы изменить шаблон элемента управления:
<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 не может быть заморожен.
Есть ли какая-то хитрость, чтобы заставить эту работу работать так, как я хочу, или мне нужен другой подход?