旋转地铁风格

时间:2012-07-25 04:58:21

标签: c# microsoft-metro rotation .net-4.5

我正在玩Metro风格应用程序(.NET 4.5 RC [C#\ XAML],VS2012 RC),我有一个问题,我无法解决。

我想实现我的应用程序将在托管设备旋转时更改布局(+ -45)。我在XAML中准备了两个布局 - 一个用于横向,第二个用于肖像,我为视觉状态做了一些动画:

<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>

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

1 个答案:

答案 0 :(得分:1)

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

  1. 手动处理 WindowsSizeChanged 事件并使用 VisualStateManager 类和 GoToState()方法
  2. 创建新项目(网格应用程序)并使其适合当前项目。