现代操作系统应用开发:UWP——标题栏后退按钮的实现和页面缓存

功能简介

示例项目有两个页面,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(根据你自己的机型选择),之前一开始学习的时候不知道这一点,从网上下载下来的项目都运行不了,纠结的一逼(╥╯^╰╥)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值