Плавно поворачивайте элементы управления из Портрета в Пейзаж в Windows Phone 7 - PullRequest
0 голосов
/ 31 декабря 2011

Я отображаю холст и хотел бы, чтобы он плавно поворачивался на 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 Ответ

1 голос
/ 31 декабря 2011

Вас может заинтересовать реализация этого эффекта Дэвидом Ансоном здесь:

http://blogs.msdn.com/b/delay/archive/2010/09/28/this-one-s-for-you-gregor-mendel-code-to-animate-and-fade-windows-phone-orientation-changes-now-supports-a-new-mode-hybrid.aspx

Это все с открытым исходным кодом.

...