UWP 页面过渡,改变动画方向

UWP Page Transition, Change Animation Direction

我有一个经常使用 Frame.Navigate() 方法的 UWP 应用程序。默认情况下,它似乎正在使用动画执行转换,使下一个屏幕看起来从底部滑动。但是,就我而言,如果下一个屏幕来自右侧或左侧更有意义。

因此,为了更改此默认行为,我使用了 this MSDN document 中的以下代码:

// Navigate to the right, ie. from LeftPage to RightPage
myFrame.Navigate(typeof(RightPage), null, new SlideNavigationTransitionInfo() { SlideNavigationTransitionEffect.FromRight } );

// Navigate to the left, ie. from RightPage to LeftPage
myFrame.Navigate(typeof(LeftPage), null, new SlideNavigationTransitionInfo() { SlideNavigationTransitionEffect.FromLeft } );

但是我得到这个错误:

Cannot initialize type 'SlideNavigationTransitionInfo' with a collection initializer because it does not implement 'System.Collections.IEnumerable'

像这样更改代码

myFrame.Navigate(typeof(RightPage), null, new SlideNavigationTransitionInfo() { Effect = SlideNavigationTransitionEffect.FromRight } );

导致应用程序因无效转换异常而崩溃。

这是我正在更新的旧应用,因此我怀疑这可能会导致问题,因此我更新了目标版本。现在定位部分如下所示:

目标版本:1809(10.0;内部版本 17763);

最低版本:(10.0; 10240)

但问题仍然存在。 知道如何解决这个问题吗?

第一个语法错误是不言自明的;虽然 InvalidCastException 似乎是由于您是 运行 的事实引起的,但您在版本低于 1809 的 OS 上编码。

SlideNavigationTransitionEffect Enum是1809加入的,你的代码可以编译成功,因为你已经安装了1809的SDK,但是在运行时,如果你不事先检查,如果运行时没有,这段代码就会失败支持一下。

//remove this from your code and it should be running well
Effect = SlideNavigationTransitionEffect.FromRight 

在这种情况下,您可以将最低版本设置为1809,以强制此应用只能安装在1809或更高版本上。或者您可以编写 version adaptive code 来检查 OS 对 API 的支持,这样,您可以根据需要将最低版本保持在较低的水平,以针对更广泛的设备。

如果您愿意,您可以简单地使用 XAML 页面转换,它也与最低版本 10240 兼容: 只需在您的 RightPageLeftPage XAML 来源中添加以下几行。

<Page.Transitions>
   <TransitionCollection>
      <EdgeUIThemeTransition Edge="Left">
      </EdgeUIThemeTransition>   
   </TransitionCollection>
</Page.Transitions>