【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 ,出现如下情况: 有人提出,此时需要重装系统,并不用如此麻烦,通 ...
随机推荐
- Linux 内核概述 - Linux Kernel
Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...
- ASP.NET MVC 请求路径相关参数的获取
Request.ApplicationPath / Request.CurrentExecutionFilePath /Home/Index Request.FilePath /Home/Index ...
- 使用etree.HTML的编码问题
title: 使用etree.HTML的编码问题 date: 2015-10-07 17:56:47 categories: [Python] tags: [Python, lxml, Xpath] ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(66)-MVC WebApi 用户验证 (2)
系列目录 前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访 ...
- 使用ubuntu作为web开发环境的一些感受
从ms-dos,win95,win98,winMe,winXp,vista,win7,win10我都有使用的经历,我使用时间最长的应属winxp,其次是win7,说实话,我觉得这两个系统是微软做的最好 ...
- jdb调试scala代码的简单介绍
在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...
- 文件随机读写专用类——RandomAccessFile
RandomAccessFile类可以随机读取文件,但是在测试中并不好用;File类可以测试文件存不存在,不存在可以创建文件;FileWriter类可以对文件进行重写或者追加内容;FileReade ...
- CSS常见技巧
一.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用? CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图像和背景图片合并到一张图片上,然后利 ...
- git添加GitHub远程库
已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作 首先,登陆GitHub, ...
- [css]实现垂直居中水平居中的几种方式
转自博客 http://blog.csdn.net/freshlover/article/details/11579669 居中方式: 一.容器内(Within Container) 内容块的父容器设 ...