Я отображаю холст и хотел бы, чтобы он плавно поворачивался на 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), поэтому трудно понять, правильный ли это путь.