MVVM WP7 - 页面导航和过渡动画

3

我是一个WP7 MVVM模型的初学者。我在实现页面之间的导航和动画过渡方面遇到了麻烦。

我想要实现以下目标:

  1. Page1 导航到 Page2 时,将开始转换动画 animation1,但当 Page1 导航到 Page3 时,将开始不同的转换动画 animation2

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

我创建了以下内容:

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

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

它是如何工作的?

  1. 用户点击后退键
  2. ExtendedPhoneApplicationPage 通过 MainViewModel(或实现 INavigation 的其他对象)询问现在应该开始哪个动画
  3. MainViewModel 返回适当的动画给 View

这符合 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>
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>

用于带有转换的页面 Style="{StaticResource PageStyle}"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接