WP7页面转换

时间:2011-09-03 05:22:50

标签: windows-phone-7 navigation transition

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

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

当我导航到S1时,它似乎从M2(旋转门)向前导航向前导航,然后导航S1向前导航(滑动)。看起来有点乱。

我的问题是

  1. 我的假设是正确的,并且正在通过这两个导航

  2. 是否有推荐的处理方法 - 所以也许页面(M2)可以通过几种方式导航,然后它不会定义转发导航但是在代码中完成。或者我是否需要向前导航并让它从导航页面中选择向前导航?

  3. 假设我确实需要这样做,那么我可以覆盖我标记它以获取样式的XAML,或者我现在需要在代码中完成所有操作吗?

  4. 由于

    <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 个答案:

答案 0 :(得分:1)

如果您希望根据要导航到的页面有更多页面转换,则应覆盖让我们说M2页面的OnNavigatingFrom方法。在页面类ignoreTransition = false中添加一个bool变量(这将告诉我们是否应该播放转换)然后在OnNavigatedFrom方法中检查是否IgnoreTransition == false,如果ignoreTransition为false则取消导航e.Cancel=true;并找到您导航到e.Uri的页面。如果Uri参考另一个M页面,则启动旋转门过渡,否则开始滑动过渡。

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

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