WP7 Page переходы - PullRequest
       18

WP7 Page переходы

2 голосов
/ 03 сентября 2011

Я включил некоторый код в APP.XAML, чтобы определить некоторые стили для переходов страниц. Это включено ниже.

В моем приложении WP7 у меня есть 3 основные страницы - скажем, M1, M2 и M3. Для каждого из них я указал в их XAML стиль «TurnstileTransition», и когда я перемещаюсь между ними, все работает хорошо. Но у меня также есть подстраница, которая используется для создания новых предметов - скажем, S1, к которой я перехожу с М2 и М3. Насколько я понимаю, переход на страницу, подобную этой, подходит для слайд-перехода, и для этих страниц я использую стиль «SlideTransition».

Когда я перехожу к S1, кажется, что он забирает Навигацию вперед от М2 (турникет), а затем Навигацию Вперед для S1 (Слайд). Выглядит немного грязно.

Мои вопросы

  1. Верно ли мое предположение и оно проходит через обе эти навигации

  2. Есть ли рекомендуемый подход к решению этой проблемы - поэтому, возможно, когда страница (M2) может отклониться несколькими способами, тогда она не определяет навигацию вперед, но оставляет это сделать в коде , Или мне нужна навигация «Вперед» и пусть она просто выбирает навигацию «Вперед» со страницы, на которую она направляется?

  3. Предполагая, что мне нужно сделать это, тогда я могу переопределить XAML, где я его пометил, чтобы выбрать стиль, или теперь мне нужно будет сделать все это в коде ??

Спасибо

<Style x:Key="TurnstileTransition" TargetType="phone:PhoneApplicationPage">
    <Setter Property="toolkit:TransitionService.NavigationInTransition">
        <Setter.Value>
            <toolkit:NavigationInTransition>
                <toolkit:NavigationInTransition.Backward>
                    <toolkit:TurnstileTransition Mode="BackwardIn"/>
                </toolkit:NavigationInTransition.Backward>
                <toolkit:NavigationInTransition.Forward>
                    <toolkit:TurnstileTransition Mode="ForwardIn"/>
                </toolkit:NavigationInTransition.Forward>
            </toolkit:NavigationInTransition>
        </Setter.Value>
    </Setter>
    <Setter Property="toolkit:TransitionService.NavigationOutTransition">
        <Setter.Value>
            <toolkit:NavigationOutTransition>
                <toolkit:NavigationOutTransition.Backward>
                    <toolkit:TurnstileTransition Mode="BackwardOut"/>
                </toolkit:NavigationOutTransition.Backward>
                <toolkit:NavigationOutTransition.Forward>
                    <toolkit:TurnstileTransition Mode="ForwardOut"/>
                </toolkit:NavigationOutTransition.Forward>
            </toolkit:NavigationOutTransition>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="SlideTransition" TargetType="phone:PhoneApplicationPage">
    <Setter Property="toolkit:TransitionService.NavigationInTransition">
        <Setter.Value>
            <toolkit:NavigationInTransition>
                <toolkit:NavigationInTransition.Backward>
                    <toolkit:SlideTransition Mode="SlideDownFadeIn"/>
                </toolkit:NavigationInTransition.Backward>
                <toolkit:NavigationInTransition.Forward>
                    <toolkit:SlideTransition Mode="SlideUpFadeIn"/>
                </toolkit:NavigationInTransition.Forward>
            </toolkit:NavigationInTransition>
        </Setter.Value>
    </Setter>
    <Setter Property="toolkit:TransitionService.NavigationOutTransition">
        <Setter.Value>
            <toolkit:NavigationOutTransition>
                <toolkit:NavigationOutTransition.Backward>
                    <toolkit:SlideTransition Mode="SlideUpFadeOut"/>
                </toolkit:NavigationOutTransition.Backward>
                <toolkit:NavigationOutTransition.Forward>
                    <toolkit:SlideTransition Mode="SlideDownFadeOut"/>
                </toolkit:NavigationOutTransition.Forward>
            </toolkit:NavigationOutTransition>
        </Setter.Value>
    </Setter>
</Style>

1 Ответ

1 голос
/ 22 октября 2011

Если вы хотите иметь больше переходов страниц в зависимости от того, на какую страницу вы переходите, вам следует переопределить метод OnNavigatingFrom, скажем, страницы M2.Добавьте переменную bool в класс вашей страницы ignoreTransition = false (это скажет нам, следует ли нам воспроизводить переход или нет), затем в методе OnNavigatedFrom проверьте, если IgnoreTransition == false, если ignoreTransition имеет значение false, отмените навигацию e.Cancel=true; инайдите страницу, на которую вы переходите e.Uri.Если Uri ссылается на другую страницу M, запустите переход турникета, в противном случае запустите переход слайда.

Далее необходимо подписаться на событие Completed перехода и, используя лямбда-выражение, перейти на страницу, по которой вы хотите перейти.: e.Uri.Также установите ignoreTransition = true;, иначе вы окажетесь в цикле.

Последнее, но не менее важное: переопределите OnNavigatedFrom и установите ignoreTransition обратно на true.

...