Windows Phone Runtime 8.1 按返回键彻底关闭App -- 重新定义硬件返回键的事件
来源:互联网 发布:windows还原更改要多久 编辑:程序博客网 时间:2024/06/04 00:22
Windows Phone Runtime 8.1里面的坑不止一点点,最明显的是很多应用以前可以通过按返回键关闭,但是在8.1之
后,如果你用了WinRT的runtime写程序,就会发现返回键的行为仅仅是返回WP的主屏幕,而不是关闭App。长按返回
键你会发现你的App是被“最小化”在后台了。WP8.1的新版日历应用也是这样。
虽然这对系统性能没有什么影响,但是让处女座用户看见了就会感觉不爽,所以我们还是把它改掉吧。
WinRT里面这个硬件返回按钮是有专门的事件的:HardwareButtons.BackPressed。我们需要处理的情况仅仅是在应用
的主页面上,按手机返回按钮关闭App,所以不需要override全局的HardwareButtons.BackPressed事件。只需要在主
页面(通常是MainPage.xaml.cs)里override两个导航事件:
protected override void OnNavigatedTo(NavigationEventArgs e){ //this.navigationHelper.OnNavigatedTo(e); Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtonsOnBackPressed;}protected override void OnNavigatedFrom(NavigationEventArgs e){ //this.navigationHelper.OnNavigatedFrom(e); Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtonsOnBackPressed;}
被我注掉的那段,如果你用的模板是Blank App,那就是木有的,所以你不用在意,反正注掉了也没用了。
关闭App很简单:
Application.Current.Exit();
但是我们希望退出App时候给用户确认提示,现在好多App都喜欢这么做。所以可以放个提示框进来。先给出最终的代
码:
async private void HardwareButtonsOnBackPressed(object sender, BackPressedEventArgs e){ e.Handled = true; if (!Frame.CanGoBack) { var dig = new MessageDialog("Are you sure you want to close this app?", "Confirm"); var btnOk = new UICommand("Yes"); dig.Commands.Add(btnOk); var btnCancel = new UICommand("No"); dig.Commands.Add(btnCancel); var result = await dig.ShowAsync(); if (null != result && result.Label == "Yes") { Application.Current.Exit(); } }}
里面需要注意的是,必须一开始执行:
e.Handled = true;
这会告诉系统,此处的硬件返回按钮的行为我们已经自己撸掉了,不用系统默认行为。如果你不写这句,那么你会发
现提示框虽然弹出了,但还没等你来得及按,应用就被“最小化”了。
另外,WinRT里面的后退按钮是按照Application History Stack后退的,而不是Silverlight Runtime里面那样按照
Page History Stack后退,所以要小心别被坑哦~
最后的效果:
转载链接:Windows Phone Runtime 8.1 按返回键彻底关闭App
最后我补充一下:
对于MessageDialog这种最原始的弹出框进行用户交互的方式,上面代码中对MessageDialog面板内容的补充是我
之前没注意过的,很受学习,希望大家不要忽略这一点:
var dig = new MessageDialog("Are you sure you want to close this app?", "Confirm");
var btnOk = new UICommand("Yes");
dig.Commands.Add(btnOk);
var btnCancel = new UICommand("No");
dig.Commands.Add(btnCancel);
var result = await dig.ShowAsync();
if (null != result && result.Label == "Yes")
{
Application.Current.Exit();
}
- Windows Phone Runtime 8.1 按返回键彻底关闭App -- 重新定义硬件返回键的事件
- Windows Phone - 返回键
- 彻底关闭应用程序 返回键的捕获
- WP7 重新定义返回键的方法
- Windows Phone 7- 返回键
- Android 捕获返回键彻底关闭应用程序
- android 彻底关闭应用程序 返回键的捕获
- Android 彻底关闭应用程序 返回键的捕获
- android 彻底关闭应用程序及返回键的捕获
- Android 彻底关闭应用程序,返回键的捕获及AlertDialog
- android 彻底关闭应用程序 返回键的捕获
- ProgressDialog按返回键关闭
- Android App首次安装完成后在安装界面直接打开应用,再按home键返回桌面,从桌面图标重新进入app,返回不到之前的界面问题
- 点击返回键关闭应用程序的步骤
- Android控制ProgressDialog按返回键关闭
- Android关于ProgressDialog按返回键关闭
- Android关于ProgressDialog按返回键关闭
- Android 返回键事件
- Brown (black) film faced plywood / marine plywood
- 面试:机器学习--贝叶斯
- 快速排序
- ASP.NET MVC加载ASCX后并获取其内控件值或赋值
- hdoj 2817 A sequence of numbers(快速幂取模)
- Windows Phone Runtime 8.1 按返回键彻底关闭App -- 重新定义硬件返回键的事件
- 黑马程序员_学习笔记BufferedReader类的原理
- 面试:机器学习--决策树
- Android的Adapter用法总结
- 6.4.5 final方法
- HPL formica plywood,BS1088 marine plywood,H timber beam
- hdu 产生冠军(充分理解题意)
- window下oralce10G使用dblink连接到mysql
- 用java写的一个简易记事本