我正在显示一个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注册过程),因此很难看出这是否是正确的方法。
答案 0 :(得分:1)