【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 ,出现如下情况: 有人提出,此时需要重装系统,并不用如此麻烦,通 ...
随机推荐
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- 05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm ...
- 通过VMware的PowerCLI配置集群内指定主机的vMotion功能
PowerCLI是VMware开发的基于微软(MSFT)的PowerShell的命令行管理vSphere的实现,因此在批量化操作方面CLI会减轻很多GUI环境下的繁琐重复劳作. 现有场景中有大量的物理 ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...
- 解决:SharePoint当中的STP网站列表模板没有办法导出到其它语言环境中使用
首在在你的英文版本上,导出列表或是网站的模板,这个文件可能是这样滴:template.stp 把这个文件 template.stp 命名为 template.cab 解压 这个 *.cab 文件 在解 ...
- 如何使用dos命令查看MySQL当前使用的数据库?
1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select database(); 如图:
- SQL-类型转换函数
CAST ( expression AS data_type)CONVERT ( data_type, expression,[style]) Select '您的班级编号'+ 1 错误这里+是数学 ...
- Fresnel Reflection - 菲涅尔反射
[Fresnel Reflection - 菲涅尔反射] “菲涅尔”是一个人的名字,因为他发现了一个有关反射的光学现象,这个现象就用这个人的名字命名了.那么,是什么现象呢? 这就是反射/折射与视点角度 ...