#region 双击退出程序代码
//双击HardwareButtons.BackPressed;
//出现退出提示窗口;
//“确定”退出,“取消”返回什么也不做;
private async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (this.Frame.BackStack.Count == )//BackStack集合中只有一个页面(MainPage.xaml)时,出现该窗口;
{
e.Handled = true;
MessageDialog msgDialog = new MessageDialog("你确定退出程序吗?", "注意"); //OK Button
UICommand okBtn = new UICommand("OK");
okBtn.Invoked = OkBtnClick;
msgDialog.Commands.Add(okBtn); //Cancel Button
UICommand cancelBtn = new UICommand("Cancel");
cancelBtn.Invoked = CancelBtnClick;
msgDialog.Commands.Add(cancelBtn); await msgDialog.ShowAsync();
}
}
//点击“取消”返回什么也不做;
private void CancelBtnClick(IUICommand command)
{
return;
}
//点击“确定”,退出程序;
private void OkBtnClick(IUICommand command)
{
Application.Current.Exit();
}
#endregion

要实现的效果如下:

双击返回键,出现提示窗口,单击“确定”退出应用,点击“取消”就什么也不做;

功能不复杂,但是不会,只好求助万能的Msdn论坛了,后来找到了方法,其中一段重要dome如下:

         #region 双击退出程序代码

         //双击HardwareButtons.BackPressed;
//出现退出提示窗口;
//“确定”退出,“取消”返回什么也不做;
private async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (this.Frame.BackStack.Count == )//BackStack集合中只有一个页面(MainPage.xaml)时,出现该窗口;
{
e.Handled = true;
MessageDialog msgDialog = new MessageDialog("你确定退出程序吗?", "注意"); //OK Button
UICommand okBtn = new UICommand("OK");
okBtn.Invoked = OkBtnClick;
msgDialog.Commands.Add(okBtn); //Cancel Button
UICommand cancelBtn = new UICommand("Cancel");
cancelBtn.Invoked = CancelBtnClick;
msgDialog.Commands.Add(cancelBtn); await msgDialog.ShowAsync();
}
}
//点击“取消”返回什么也不做;
private void CancelBtnClick(IUICommand command)
{
return;
}
//点击“确定”,退出程序;
private void OkBtnClick(IUICommand command)
{
Application.Current.Exit();
} #endregion

知道这段dome还不行,要用这几个方法去修改Common文件夹下NavigationHelper.cs类中返回事件相关的代码,原代码如下:

 private async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (this.GoBackCommand.CanExecute(null))
{
e.Handled = true;
this.GoBackCommand.Execute(null);
} }

修改后的代码如下:

  private async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (this.Frame.BackStack.Count==)
{
e.Handled = true;
MessageDialog msgDialog = new MessageDialog("你确定退出程序吗?", "注意"); //OK Button
UICommand okBtn = new UICommand("OK");
okBtn.Invoked = OkBtnClick;
msgDialog.Commands.Add(okBtn); //Cancel Button
UICommand cancelBtn = new UICommand("Cancel");
cancelBtn.Invoked = CancelBtnClick;
msgDialog.Commands.Add(cancelBtn); await msgDialog.ShowAsync();
}
else
{
e.Handled = true;
this.GoBackCommand.Execute(null);
} }

其中this.Frame.BackStack.Count==1表示页面缓存中只有一个页面时,执行if下dome,否则执行else;

主要修改Common文件夹下NavigationHelper.cs类中返回事件的以上dome就行了,就能实现如上图的效果,

修改的dome不一定按我的这个方法,自己可以根据看书的应用程序需求进行修改,这样会适合你的程序的;

WP8.1应用双击返回键退出程序。的更多相关文章

  1. android双击返回键退出程序

    今天给大家简单说一下,android双击返回键退出程序. @Override public boolean onKeyDown(int keyCode, KeyEvent event) {      ...

  2. Android应用系列:双击返回键退出程序

    前言 有一个很古老的应用技巧,一直被各种大大小小的app用得乐此不疲,那就是双击返回键退出程序.今天就写写它的实现代码,非常简单而且实用. 正文 双击返回键退出程序,一般有两种实现思路,一种是用一个布 ...

  3. android双击返回键退出程序的实现

    /** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-gen ...

  4. PhoneGap API 之事件处理_双击返回键退出程序

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. Android 监听返回键退出程序的两种实现

    1.Android 双击返回键退出程序 思路:用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态.定 ...

  6. WP8.1 双击两次返回键退出程序

    在实现Windows Phone上实现点按两次返回键退出程序, 一种方法是使用Coding4Fun提供的ToastPrompt, 使用方法如下: 1. 安装引用, 打开Package Manager ...

  7. Android中的“再按一次返回键退出程序”实现

    用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dial ...

  8. Android_按两次返回键退出程序和长按返回键退出程序

    以上两个功能主要是参考了一下博客的: http://blog.csdn.net/chenshijun0101/article/details/7682210 http://blog.csdn.net/ ...

  9. ionic 实现双击返回键退出应用功能

    ionic 实现双击返回键退出应用功能 keywords cordova,ngcordova,phonegap,ionic,双击,返回键,退出 例子 准备Toast插件,提示用,用户体验好点,不是必须 ...

随机推荐

  1. CCArray

    CCArray也是cocos2d-x自己写的类.它相当于是objc的NSArray.在cocos2d-x中是没有NSArray的概念的(NSArray和NSMutableArray的唯一区别就是一个不 ...

  2. java系列--HTTP协议

    一.HTTP请求信息 请求行 请求头 空行 消息体 1.防盗链: 枚举类型: 二.中文乱码问题 1.Get提交 String username = request.getParameter(" ...

  3. bzoj 1036

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 11858  Solved: 4803[Submit ...

  4. OSG和osgearth显示中文(转载)

    osgEarth支持中文过程详解 OSG和osgearth显示中文 一.知识储备   要想很好的理解和解决这个问题,首先要了解什么是多字节和宽字节.说实话我之前也知道这两个字节到底有什么区别,只是简单 ...

  5. Jenkins中deploy插件的deploy war/ear to a container与deploy artifacts to maven reepository区别

    deploy war/ear to a container:发布war包到服务器 deploy artifacts to maven reepository:发布到maven服务器

  6. RF & Microarray

    REF[24] 随机森林是一个很好适用于微阵列数据的分类算法: 1.即使大多数的预测变量都是噪音,RF仍然具有优秀的性能,因此不需要对基因进行预选择. 2.能够应用于变量数远远大于观测数据量的情况 3 ...

  7. js模块化开发——AMD规范

    这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就 ...

  8. Unity 脚本中update,fixedupdate,lateupdate等函数的执行顺序

    结论 通过一个例子得出的结论是:从先到后被执行的函数是 Awake->Start->FixedUpdate->Update->LateUpdate->OnGUI. 示例 ...

  9. HTML5 Canvas、内联 SVG、Canvas vs. SVG

    canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...

  10. MyBatis 一对多关联查询

    sqlxml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC ...