2

画面サイズに基づいて、コンパクト状態と展開状態の間でコントロールを切り替えようとしています。これを行うために、視覚的な状態を使用してコントロールのテンプレートを変更しています。

<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 は凍結できません。

これを希望どおりに機能させるためのトリックはありますか、それとも別のアプローチを取る必要がありますか?

4

0 に答える 0