Windows phone 7 MVVMWP7-页面导航和转换动画

Windows phone 7 MVVMWP7-页面导航和转换动画,windows-phone-7,mvvm,mvvm-light,transition,Windows Phone 7,Mvvm,Mvvm Light,Transition,我是WP7中MVVM模型的初学者。我很难实现页面之间的导航和动画转换 我想要达到的目标: 当第1页导航到第2页时,将启动过渡动画动画1,但当第1页导航到第3页时,将启动不同的过渡动画动画2 ViewModel可以取消GoBack导航,例如,当搜索模式打开时(文本框可见,用户按back键后,文本框将隐藏,ViewModel将切换到搜索模式关闭,并阻止页面向后导航) 我创造了这样的东西: <Navigation> <NavigationInTransition>

我是WP7中MVVM模型的初学者。我很难实现页面之间的导航和动画转换

我想要达到的目标:

  • 当第1页导航到第2页时,将启动过渡动画动画1,但当第1页导航到第3页时,将启动不同的过渡动画动画2

  • ViewModel可以取消GoBack导航,例如,当搜索模式打开时(文本框可见,用户按back键后,文本框将隐藏,ViewModel将切换到搜索模式关闭,并阻止页面向后导航)

  • 我创造了这样的东西:

    <Navigation>
            <NavigationInTransition>
                <NavigationInTransition.ForwardTransitions>
                    <ForwardTransition NavigateTo="page2.xaml">
                        <ForwardTransition.Animation>
                            <SlideTransitionAnimation Mode="ForwardIn"/>
                        </ForwardTransition.Animation>
                    </ForwardTransition>
                    <ForwardTransition NavigateTo="page3.xaml">
                        <ForwardTransition.Animation>
                            <TurnstyleTransitionAnimation Mode="ForwardIn"/>
                        </ForwardTransition.Animation>
                    </ForwardTransition>
                </NavigationInTransition.ForwardTransitions>
            </NavigationInTransition>
            <BackKeyPressed IsPrevent="{Binding SomethingBool}" Command="{Binding BackKeyPressed}"/>
    </Navigation>
    
    ExtendedPhoneApplicationPage:PhoneApplicationPage-特殊控件,继承自PhoneApplicationPage,通过接口调用对ViewModel的请求

    MainViewModel:INavigation-MainViewModel,它是ViewModel,并实现接口INavigation

    它是如何工作的

  • 用户单击后退键
  • ExtendedPhoneApplicationPage询问MainViewModel(或实现InActivation的不同版本)现在应该开始什么动画
  • MainViewModel将正确的动画返回到视图
  • MVVM是否正确?如果没有,如何实现这一点?

    编辑:

    可能我上面写的不是很好的解决方案,我读到ViewModel应该只通过数据绑定和命令与View通信。我今天在想这个,我有了这个想法

    在XAML中,应该是这样的:

    <Navigation>
            <NavigationInTransition>
                <NavigationInTransition.ForwardTransitions>
                    <ForwardTransition NavigateTo="page2.xaml">
                        <ForwardTransition.Animation>
                            <SlideTransitionAnimation Mode="ForwardIn"/>
                        </ForwardTransition.Animation>
                    </ForwardTransition>
                    <ForwardTransition NavigateTo="page3.xaml">
                        <ForwardTransition.Animation>
                            <TurnstyleTransitionAnimation Mode="ForwardIn"/>
                        </ForwardTransition.Animation>
                    </ForwardTransition>
                </NavigationInTransition.ForwardTransitions>
            </NavigationInTransition>
            <BackKeyPressed IsPrevent="{Binding SomethingBool}" Command="{Binding BackKeyPressed}"/>
    </Navigation>
    

    在App.xaml中创建资源

      <Style x:Key="PageStyle" 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=“{StaticResource PageStyle}”