Windows phone 7 WP7页面转换

Windows phone 7 WP7页面转换,windows-phone-7,navigation,transition,Windows Phone 7,Navigation,Transition,我在APP.XAML中包含了一些代码,用于定义页面转换的一些样式。它包括在下面 在我的WP7应用程序中,我有3个主页——比如M1、M2和M3。对于它们中的每一个,我都在它们的XAML中标记为使用“TurnstileTransition”样式,当我在它们之间导航时,一切都很好。但是,我还有一个子页面,用于创建新项目,比如S1,我从M2和M3导航到S1。我的理解是,导航到这样的页面适合幻灯片转换,对于这些页面,我使用的是“SlideTransition”样式 当我导航到S1时,它似乎会从M2(旋转栅

我在APP.XAML中包含了一些代码,用于定义页面转换的一些样式。它包括在下面

在我的WP7应用程序中,我有3个主页——比如M1、M2和M3。对于它们中的每一个,我都在它们的XAML中标记为使用“TurnstileTransition”样式,当我在它们之间导航时,一切都很好。但是,我还有一个子页面,用于创建新项目,比如S1,我从M2和M3导航到S1。我的理解是,导航到这样的页面适合幻灯片转换,对于这些页面,我使用的是“SlideTransition”样式

当我导航到S1时,它似乎会从M2(旋转栅门)拾取向前导航,然后从S1(幻灯片)拾取向前导航。看起来有点乱

我的问题是

  • 我的假设正确吗?这两次航行都是这样吗

  • 是否有一种推荐的方法来处理这个问题?因此,如果一个页面(M2)可以通过两种方式导航,那么它就不会定义向前导航,而是让代码来完成。或者我需要向前导航,让它只从它要去的页面中选择向前导航

  • 假设我确实需要这样做,那么我会覆盖我标记的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>
    

    如果您想根据导航到的页面进行更多页面转换,您应该覆盖M2页面的
    on navigating from
    方法。在页面类中添加bool变量
    ignoreTransition=false
    (这将告诉我们是否应该播放转换),然后在
    OnNavigatedFrom
    方法中检查如果
    ignoreTransition==false
    ,如果ignoreTransition为false,则取消导航
    e.cancel=true
    并找到您要导航到的页面
    e.Uri
    。如果Uri指向另一个M页面,则启动旋转栅门转换,否则启动幻灯片转换

    接下来,您需要订阅转换的
    Completed
    事件,并使用lambda表达式导航到要导航的页面:
    e.Uri
    。同时设置
    ignoreTransition=true否则您将以循环结束

    最后但并非最不重要的一点:覆盖
    OnNavigatedFrom
    并将
    ignoreTransition
    设置回
    true