2011-09-03 94 views
2

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

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

当我导航到S1时,它似乎选取从M2(旋转门)向前导出,然后导航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

如果你想拥有这取决于页你导航到你应该重写让我们说页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