Изменение шаблона управления через визуальное состояние приводит к ошибке: "Этот 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 не может быть заморожен.

Есть ли какая-то хитрость, чтобы заставить эту работу работать так, как я хочу, или мне нужен другой подход?

0 ответов

Другие вопросы по тегам