3

我是 WP7 中 MVVM 模型的初学者。我无法实现页面之间的导航以及动画过渡。

我想要达到的目标:

  1. Page1导航到Page2将开始过渡动画animation1但当Page1导航到Page3将开始不同的过渡动画animation2

  2. ViewModel 可以取消 GoBack 导航,例如打开搜索模式时(TextBox 可见,用户按返回键后,TextBox 将被隐藏,ViewModel 将切换到搜索模式关闭,并防止页面导航返回)

我创造了这样的东西:

ExtendedPhoneApplicationPage : PhoneApplicationPage - 特殊控件,继承自PhoneApplicationPage,通过接口INavigation调用ViewModel的请求

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

这个怎么运作 ?

  1. 用户点击返回键
  2. ExtendedPhoneApplicationPage 询问 MainViewModel(或实现 INavigation 的不同)现在应该开始什么动画
  3. MainViewModel 将正确的动画返回给 View

MVVM 是否正确?如果没有怎么能做到这一点?

编辑:

可能我上面写的不是很好的解决方案,我读到 ViewModel 应该只通过 Data Binding 和 Command 与 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>
4

1 回答 1

0

在 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>

对于具有过渡样式 =“{StaticResource PageStyle}”的页面

于 2012-10-11T08:33:58.610 回答