我在APP.XAML中包含了一些代码来定义页面转换的一些样式。它包含在下面。
在我的WP7应用程序中,我有3个主页 - 比如M1,M2和M3。对于他们中的每一个,我在他们的XAML中标记为使用'TurnstileTransition'样式,当我在它们之间导航时,一切都运行良好。但是,我还有一个用于创建新项目的子页面 - 比如我从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>
答案 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
。