2019-7-4-win10-uwp-处理用户点击关闭按钮
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp 处理用户点击关闭按钮
|
lindexi
|
2019-07-04 09:28:57 +0800
|
2019-07-04 09:21:15 +0800
|
Win10 UWP
|
在 UWP 开发的时候,我做的文档软件需要在文档还没有保存的时候,用户点击关闭按钮的时候告诉用户需要保存。如何在 UWP 阻止用户点击关闭按钮退出软件,如何知道用户点击了关闭按钮
在 UWP 中有限制的功能,需要在 Package.appxmanifest 中开启,关于限制的功能请看App capability declarations
拿到用户点击事件需要在 Package.appxmanifest 添加 confirmAppClose 功能
添加方法是点击 Package.appxmanifest 右击点查看代码
找到现有的 Capabilities 元素,默认一个空的 UWP 应用里面会添加网络功能,可以看到下面代码
<Capabilities>
<Capability Name="internetClient" />
</Capabilities>
在这个元素里面再添加一项,请看代码
<rescap:Capability Name="confirmAppClose" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"/>
这里的 rescap 就是限制的意思,需要添加命名空间,添加之后的代码请看下面
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="confirmAppClose" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"/>
</Capabilities>
添加完成之后,就可以在代码里面使用,我在主页面的构造函数监听关闭事件,请看代码
Windows.UI.Core.Preview.SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += MainPage_CloseRequested;
在 MainPage_CloseRequested 触发的时候就是用户点击关闭按钮,或者用户在任务栏右击关闭应用
在 MainPage_CloseRequested 可以让应用延迟关闭或阻止应用关闭,如下面代码,我就不让用户关闭应用
private async void MainPage_CloseRequested(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
{
// 让用户无法关闭
e.Handled = true; var messageDialog = new MessageDialog("欢迎访问 blog.lindexi.com 大量 UWP 博客", "骚年你确定关闭");
await messageDialog.ShowAsync();
}
只需要通过 e.Handled = true 就可以阻止用户关闭应用,就这样写出了一个用户无法快速退出的应用,基本上只能通过任务管理器才能退出
在我的软件里面作为文档软件需要在用户退出的时候发现有没有保存的文档就提示用户保存,也就是需要和上面代码差不多,给出提示。但是在 UWP 中的提示是异步的,也就是异步的提示无法阻止事件的继续,可以看到的是在用户点击关闭的时候,软件的提示页面还没显示,软件就关闭了
在 SystemNavigationCloseRequestedPreviewEventArgs 提供了延迟关闭的方法
在开始显示提示页面之前,调用 e.GetDeferral() 方法拿到返回值,在执行完成方法之后调用完成方法,请看代码
var deferral = e.GetDeferral();
var messageDialog = new MessageDialog("欢迎访问 blog.lindexi.com 大量 UWP 博客", "骚年你确定关闭");
await messageDialog.ShowAsync();
deferral.Complete();
上面代码的 deferral 可以作为字段保存,这样可以在执行完成更多代码之后才调用完成
2019-7-4-win10-uwp-处理用户点击关闭按钮的更多相关文章
- win10 uwp 保存用户选择文件夹
如果我们每次把临时处理的文件保存,都要让用户选择一次,用户会不会觉得uwp垃圾?如果我们每次打开应用,都从某个文件读取,而这个文件不在应用目录和已知的目录,那么每次都需要用户选择,用户会不会觉得uwp ...
- Win10 UWP开发系列:实现Master/Detail布局
在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...
- Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航
在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便.全景视图因为对设计要求比较高,自己总是做不出好的效果.对于一般的新闻阅读类Ap ...
- Win10/UWP开发—凭据保险箱PasswordVault
PasswordVault用户凭据保险箱其实并不算是Win10的新功能,早在Windows 8.0时代就已经存在了,本文仅仅是介绍在UWP应用中如何使用凭据保险箱进行安全存储和检索用户凭据. 那么什么 ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- 【Win10 UWP】后台任务与动态磁贴
动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...
- 【Win10 UWP】URI Scheme(一):Windows Store协议的解析和使用
协议是Windows Phone和Windows Store应用的一个重要特点,可以做到在不同应用之间进行互相呼起调用.小小协议,学问大着呢.我打算写几篇关于协议在UWP中使用的文章. 这一讲的主要对 ...
- Win10 UWP应用发布流程
简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...
- 【Win10 UWP】QQ SDK(一):SDK基本使用方法
每当开发一个应用需要社交分享的应用时,总是心里咯噔一下:到底什么时候分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方似乎从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个可以创建 ...
随机推荐
- 2016年省赛 G Triple Nim
2016年省赛 G Triple Nimnim游戏,要求开始局面为先手必败,也就是异或和为0.如果n为奇数,二进制下最后一位只有两种可能1,1,1和1,0,0,显然异或和为1,所以方案数为0如果n为偶 ...
- Rabbitmq交换机三种模式介绍
1.topic 将路由键和某模式进行匹配.此时队列需要绑定要一个模式上.符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词.因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc. ...
- TZ_02MyBatis_一级缓存和二级缓存
1.Mybatis中的缓存 1>什么是缓存 存在于内存中的临时数据. 2> 为什么使用缓存 减少和数据库的交互次数,提高执行效率. 3>什么样的数 ...
- ubuntu中vi下删除键和上下左右键输入字符异常(ABCD)
刚安装的Ubuntu系统,使用vi编辑文本的时候, 出现以下现象: 点删除键输入了 D 回车无效 上下左右为字母 光标乱跳 原因: 自带的vi功能问题 解决: 卸载原有vi,重新安装完整版本vim 执 ...
- 使用jquery-file-upload实现上传图片时报empty file upload result错误
原因:后台返回的json格式没有严格按照github中的格式返回 参考:https://groups.google.com/forum/#!topic/jquery-fileupload/0q8PN2 ...
- css3 实现明信片正背面翻转
<!DOCTYPE html> <html lang="zh-cn" style="width: 100%;height: 100%;"> ...
- 元素 XXXX 的前缀 "mvc" 未绑定
这个问题是由于spring-servlet配置不全 在上边部分添加一句 xmlns:mvc="http://www.springframework.org/schema/mvc" ...
- 007-使用python统计代码行数,空行以及注释
# 自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来 1.打开文件方法 1.1 以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符 f ...
- unity限帧的正确姿势
首先 unity上面要做一下手脚 打开后如下 接着.... 在Inspector面板 把V Sync Count 设置为不限制(Don`t Sync)(我们用脚本限制,不然unity自己控制不了它自己 ...
- MyBatis Oracle批量插入
1.oracle如何insert into 多个values https://www.cnblogs.com/mq0036/p/6370224.html?utm_source=itdadao& ...