功能简介
示例项目有两个页面,MainPage和NewPage,实现从MainPage跳转到NewPage,再从NewPage后退到MainPage,同时还原Mainpage之前的状态;
MainPage.xaml代码如下:
<!-- MainPage.xaml -->
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<!--
一个文本块,一个文本框(可以在其中输入数据,跳转回来后文本框的内容依然存在)
按钮,点击跳转
-->
<TextBlock Text="This is the MainPage" Margin="5" FontSize="40"></TextBlock>
<TextBox Margin="5"></TextBox>
<Button Content="Navigate To NewPage" Click="NavigateToNewPage" Margin="5"></Button>
</StackPanel>
</Grid>
NewPage.xaml的代码如下:
<!-- NewPage.xaml -->
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">、
<!-- 就一行,告诉你页面跳转了 -->
<TextBlock Text="This is the NewPage" FontSize="40"></TextBlock>
</Grid>
实现效果
- 跳转前—MainPage:在文本框内随意输入内容
- 跳转后—NewPage:标题栏多了后退按钮
- 后退—MainPage:之前文本框内的内容被保留了下来
实现过程
新建MainPage和NewPage两个页面,并且将上面的xaml代码复制到这两个页面的代码中
关于新建一个页面的方法:
解决方案资源管理器—>添加—>新建项—>Visual C#—>空白页
修改App.xaml.cs
- 在 OnLaunched方法中添加下面的代码
/*
* 这里用到了事件的C#事件订阅
* SystemNavigationManager.GetForCurrentView().BackRequested将在后退导航的时候发生,
* 而 += 符号右边的BackRequested是我们自定义的函数,将在下面声明定义
* += 符号是该自定义函数在后退导航的时候,会被调用;
* 同理,OnNavigated将在跳转到想要的页面的时候调用
*/
SystemNavigationManager.GetForCurrentView().BackRequested += BackRequested;
rootFrame.Navigated += OnNavigated;
- 在App.xaml.cs中定义函数:BackRequested
//后退按钮点击事件
private void BackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
//CanGoBack也是系统内置的一个函数
if (rootFrame != null && rootFrame.CanGoBack)
{
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
rootFrame.GoBack();
}
}
- 在App.xaml.cs中定义函数:OnNavigated
//跳转到你想要的页面时发生
private void OnNavigated(object sender, NavigationEventArgs e)
{
//AppViewBackButtonVisibility为标题栏后退按钮是否可见
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = ((Frame)sender).CanGoBack ?
AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}
在MainPage.xaml.cs的构造函数上添加代码
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
这行代码将开启页面缓存,如果需要频繁切换页面,而且页面信息不必实时更新时,使用页面缓存是非常高效的;
FYI
项目下载:BackRequestedSample
项目下载之后记住把Debug模式从ARM换成X86或X64(根据你自己的机型选择),之前一开始学习的时候不知道这一点,从网上下载下来的项目都运行不了,纠结的一逼(╥╯^╰╥)