在Windows Phone 7中平滑地将控件从纵向旋转到横向

时间:2011-12-31 14:23:49

标签: windows-phone-7 expression-blend

我正在显示一个Canvas,并希望当手机从纵向旋转到横向时,它可以平滑旋转90度。

似乎当手机旋转时(至少在模拟器中)画布会自动旋转但过渡不是平滑的(即从0到90度) - 我认为这是自动 - 布局功能。

我希望我的画布能够平滑旋转,即不会突然从0度跳到90度(如自动布局功能那样)。我在Blends状态管理器中设置了两个状态,我调用了以下内容:

    private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
    {
        if ((e.Orientation & PageOrientation.Landscape) != 0)
        {
            VisualStateManager.GoToState(this, "Landscape", true);
        }
        else
        {
            VisualStateManager.GoToState(this, "Portrait", true);
        }
   }

我已在这些之间设置过渡如下:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="OrientationStates">
        <VisualStateGroup.Transitions>
            <VisualTransition From="Portrait" GeneratedDuration="0" To="Landscape">
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="LayoutRoot">
                        <EasingDoubleKeyFrame KeyTime="0" Value="90"/>
                        <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </VisualTransition>
            <VisualTransition From="Landscape" GeneratedDuration="0" To="Portrait">
                                        <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="LayoutRoot">
                        <EasingDoubleKeyFrame KeyTime="0" Value="90"/>
                        <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </VisualTransition>
        </VisualStateGroup.Transitions>
        <VisualState x:Name="Portrait"/>
        <VisualState x:Name="Landscape"/>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

有趣的是,似乎转换应该以90度开始并且旋转回0,因为看起来自动布局功能首先开始。这是我应该做的吗?

或者如何覆盖自动布局功能以便首先触发转换?

我只在模拟器中工作(等待漫长的App Hub注册过程),因此很难看出这是否是正确的方法。

1 个答案:

答案 0 :(得分:1)