【Win 10应用开发】响应系统回退键的导航事件
按例,老周今天要讲一个故事,这个故事之前老周在微博上分享过。大伙知道在8.1的时候,有一个扩展类库——NotificationExtensions,可以真TMD轻松生成通知XML模板,其实,这个类库也支持UWP的自适应通知模板,要是你需要的话,可以握紧鼠标,拼命点这里:https://github.com/WindowsNotifications/NotificationsExtensions
这是Github上的开源组件,至于说github是什么,不要问我,老周也不知道是什么。
================================================
好了,简单的开场白说完了,要是不谈正事的话,老周担心有人会扔砖头了。你如果要扔的话,请不要扔普通的砖头,普通砖头老周不要,你最好扔几块新出土的,魏晋时期的,上面刻有“永和九年”字样的砖头,你扔这种砖头,老周会接的。
以往,在Windows Phone 8.1应用中,我们可以处理硬件按钮事件来处理“回退”键,就是手机下方,一个向左箭头的键,按它可以后退的。
在UWP中,也确实很海纳百川地兼容这种做法,然而,UWP是完全通用的,不似8.1时候那样划分共享代码实为两个项目,UWP是单应用通用,所以,处理这个回退键,总得考虑一下PC/平板、xBox上的情形。故老周不推荐使用老方法。
SDK 开发团队也不是傻子,既然要通了,就要一通到底,不然怎么叫“全球通”呢,当然了,不是某移动的全球通。为了能让这一事件处理能够在N + 105种设备上都能兼容,UWP 运行时公开了一个类叫SystemNavigationManager,你如果不知道这类在哪,老周说过上千遍了,打开“对象浏览器”窗口进行搜索就行了。
哦,对了,如果你安装了多个版本的SDK,可能你会看到1.0,2.0之类的东东,比如这样。

老周记得曾经给大家用最不专业的语言介绍过,UWP API(配置中叫 UAP)是通过一系列XML文件进行版本配置,不同版本之间可以友好相处。此处1.0是10240时的API集,2.0是10586时的API集。而通过XML配置版本的形式灵活在这里,1.0和2.0的API不是完全独立,有的API是共用的,所以,如果你有10240和10586的SDK,不用去卸载旧版本的,因为里面有共享的内容,以后微软会继续增加功能,只要把新的.wimd融合进去就行了,再更新一下XML文件即可,不必做大的改动,这样方便扩展。
好,没要紧的屁话说完了,为什么说那么多F话呢,因为这个SystemNavigationManager类用起来很简单,所以,老周不用花太多的时间去说。
手机上的回退键就不多说了,那,PC/平板上的呢。其实,你如果细心的话,早就发现了,在比如“应用商店”等内置应用中就看到了。
在桌面模式下,这个后退按钮显示在窗口标题栏的左边。

在平板模式下,由于窗口标题栏会隐藏,所以会在系统的任务栏上(“开始”按钮右边)显示一个向左的箭头,这个就是回退键。

发现这些不需要天赋,只要你细心,什么都逃不过你的法眼。
使用SystemNavigationManager类时应调用静态方法GetForCurrentView,这样你就能得到该类的一个实例。在桌面模式下,默认情况回退键是不会显示的,要让它显示,就在App类重写的OnLaunch方法中加上这些代码:
SystemNavigationManager navmgr = SystemNavigationManager.GetForCurrentView();
navmgr.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
修改AppViewBackButtonVisibility属性就可以控制这个按钮是否显示了。
然后,我们还得处理BackRequested事件,这个好理解,就是回退键被按后,就会发生这个事件,在手机和平板模式下,系统行为是返回上一个应用或回到开始屏幕;在桌面模式下没反应。
如果你希望这个回退键被按后,不是直接执行系统行为,而是先让应用程序在Frame导航堆栈中后退,等到“无路可退”时,你有两种措施:一种是跟随系统默认行为;另一种是退出应用程序。
事件处理参数有一个Handled属性,把它设置为 true ,就可以屏蔽系统行为,然后你自行处理。比如我这个例子,有三个页——主页、第二页、第三页,从主页可以分别导航到第二页或第三页,然后按回退键后退回主页;到了主页后,不能再退,再次按下回退键就直接退出程序。
好,看代码。
Frame root = Window.Current.Content as Frame;
if (root != null)
{
if (root.CanGoBack)
{
e.Handled = true;
root.GoBack();
}
else
{
this.Exit();
}
}
退出应用程序的方法是调用从 Application 类继承的 Exit 方法。上面代码不复杂,相信能理解。
最终效果如下图。

运行后,进入其他页面,然后点击回退按钮退回主页,再点一次,就退出。
OK,今天的节目就到这里,剧组缺钱,不能再加时了。欢迎继续关注火星电视台的节目更新。
【Win 10应用开发】响应系统回退键的导航事件的更多相关文章
- 【Win 10应用开发】认识一下UAP项目
Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...
- win 10 自带 Ubuntu 系统的文件位置
win 10 自带 Ubuntu 系统的文件位置 Ubuntu 作为最为流行 Linux 系统中的一种,是用来学习 Linux 相关知识是最好不过的选择.专门搞一个 Ubuntu 系统的电脑不太现实, ...
- 【Win 10 应用开发】启动远程设备上的应用
这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...
- 【Win 10 应用开发】导入.pfx证书
这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...
- 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...
- 【Win 10 应用开发】在代码中加载文本资源
记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...
- 【Win 10应用开发】延迟共享
延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...
- 【Win 10 应用开发】RTM版的UAP项目解剖
Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...
- Win 10 和 Linux 双系统,从硬盘删除Linux分区,Win 10引导修复
由于安装双系统后,Linux 用的比较少.因此,从Win 10 磁盘管理中删除了linux 占用的磁盘空间,重启后无法进入win 10 ,出现如下情况: 有人提出,此时需要重装系统,并不用如此麻烦,通 ...
随机推荐
- 如何用百度MIP快速搭建体验友好的移动页面
在读这篇文章之前,请确定你已经了解MIP定义及加速原理.如果不确定的话,可以到MIP官网了解. 改造前期准备和注意事项: 你可以选择直接将原先的移动站点直接改成MIP站,也可以单独再做一套MIP站点与 ...
- ASP.NET Core HTTP 管道中的那些事儿
前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- 回首经典的SQL Server 2005
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com SQL Server是我使用时间最长的数据库,算起来已经有10年了.上世纪90年代,微软在软件开发的所有领域高歌猛 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...
- 主成分分析(PCA)原理总结
主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就 ...
- 基于ASP.NET/C#开发国外支付平台(Paypal)学习心得。
最近一直在研究Paypal的支付平台,因为本人之前没有接触过接口这一块,新来一家公司比较不清楚流程就要求开发两个支付平台一个是支付宝(这边就不再这篇文章里面赘述了),但还是花了2-3天的时间通 ...
- CSS 3学习——transition 过渡
以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...
- CSS知识总结(九)
CSS常用样式 10.自定义动画 1)关键帧(keyframes) 被称为关键帧,其类似于Flash中的关键帧. 在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“ ...