1

假設我們有2頁(Windows.UI.Xaml.Controls.Page)。
page1調用this.Frame.Navigate(typeof(Page2),);顯示第二頁。
如何動畫頁面,使傳出頁面動畫到左側,傳入頁面從右側動畫?如何在WinRT下創建iOS NavigationController風格的頁面導航?

下面是當前的代碼:

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); 
} 

回答

0

一種方法是更換標準Frame控制和使用我的AlternativeFrame控件does exactly what you ask for。它支持顯示兩個頁面的轉換,您還可以預加載下一頁,以便在用戶請求時立即打開。

另一種解決方案是使用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 here