1

假设我们有 2 个页面 (Windows.UI.Xaml.Controls.Page)。
page1 调用 this.Frame.Navigate(typeof(Page2), ); 显示第二页。
如何为页面设置动画,以便传出页面向左设置动画,传入页面从右侧设置动画?

这是当前代码:

XAML 文件

<Page>   
    ...  
    <Page.Transitions>  
        <TransitionCollection>  
            <PaneThemeTransition Edge="Right" x:Name="pageTransition"/>  
        </TransitionCollection>  
    </Page.Transitions>  
    ...  
</Page>  

CS文件

protected override void OnNavigatedFrom(NavigationEventArgs e)  
{  
    if (e.NavigationMode == NavigationMode.New) pageTransition.Edge = EdgeTransitionLocation.Left;  
    else if (e.NavigationMode == NavigationMode.Back) pageTransition.Edge = EdgeTransitionLocation.Right;  
    base.OnNavigatedFrom(e);  
}  
4

1 回答 1

0

一种方法是替换标准Frame控件并使用我的AlternativeFrame控件来满足您的要求。它支持显示两个页面的转换,您还可以预加载下一页以使其在用户要求时立即打开。

另一种解决方案是使用当前页面的屏幕截图RenderTargetBitmap.RenderAsync()并将其显示在根框架前面,以便将其隐藏在该屏幕截图后面,然后导航到新页面并在加载时 - 运行将屏幕截图滑动到的动画一边同时在新页面滑动到位。跨页转场的标准控件中没有内置支持Frame,但是自己构建也不是太难。

这是一个的AlternativeFrame样子:

<controls:AlternativeFrame
    x:Name="rootFrame"
    xmlns:controls="using:WinRTXamlToolkit.Controls"
    xmlns:Extensions="using:WinRTXamlToolkit.Controls.Extensions" 
    Extensions:FrameworkElementExtensions.ClipToBounds="True">
    <controls:AlternativeFrame.PageTransition>
        <controls:PushTransition
            ForwardDirection="Random"
            BackwardDirection="Random" />
    </controls:AlternativeFrame.PageTransition>
</controls:AlternativeFrame>

您需要使用它AlternativePage而不是简单地Page

<controls:AlternativePage
    x:Class="YourApp.YourPageType"
    IsTabStop="false"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="using:WinRTXamlToolkit.Controls">
    <Grid>
    </Grid>
</controls:AlternativePage>

然后,您可以像这样预加载新页面:

await rootFrame.Preload(typeof(YourApp.YourPageType), null);

并像这样导航:

await rootFrame.Navigate(typeof(YourApp.YourPageType), null);

还有一些其他的转换,你可以添加你自己的,但PushTransition实现你所要求的。

哦,您可以在此处从 NuGet 中提取工具包。

于 2014-05-07T20:30:17.940 回答