0

我目前正在使用 Metro 风格应用程序(.NET 4.5 RC [C#\XAML],VS2012 RC),但我遇到了一个无法解决的问题。

我想实现我的应用程序将在旋转托管设备时更改布局(+-45)。我在 XAML 中准备了两种布局 - 一种用于横向,另一种用于纵向,并且我为 Visual States 做了一些动画:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="ApplicationViewStates">
        <VisualState x:Name="FullScreenLandscape"/>
        <VisualState x:Name="Filled"/>
        <VisualState x:Name="FullScreenPortrait">
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ControlContentLandscape" Storyboard.TargetProperty="Visibility">
                    <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
                </ObjectAnimationUsingKeyFrames>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ControlContentPortrait" Storyboard.TargetProperty="Visibility">
                    <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
        <VisualState x:Name="Snapped"/>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

但我不知道下一步该做什么。当我的设备变成纵向模式时,如何设置我的应用程序将执行这些动画?

4

1 回答 1

1

我已经分析了 Grid App 模板。而且我注意到那里的主页继承自 Common 文件夹中的LayoutAwarePage类。LayoutAwarePage类为使用VisualStateManager在状态之间切换的WindowSizeChanged事件提供处理程序- 这是我当前项目中缺少的部分。解决方案是:

  1. 手动处理WindowsSizeChanged事件并使用VisualStateManager类和GoToState()方法
  2. 创建新项目(网格应用程序)并将其放入当前项目中。
于 2012-07-26T05:22:16.853 回答