WP8.1应用双击返回键退出程序。
1 #region 双击退出程序代码 2 //双击HardwareButtons.BackPressed; 3 //出现退出提示窗口; 4 //“确定”退出,“取消”返回什么也不做; 5 private async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 6 { 7 if (this.Frame.BackStack.Count == 1)//BackStack集合中只有一个页面(MainPage.xaml)时,出现该窗口; 8 { 9 e.Handled = true; 10 MessageDialog msgDialog = new MessageDialog("你确定退出程序吗?", "注意"); 11 12 //OK Button 13 UICommand okBtn = new UICommand("OK"); 14 okBtn.Invoked = OkBtnClick; 15 msgDialog.Commands.Add(okBtn); 16 17 //Cancel Button 18 UICommand cancelBtn = new UICommand("Cancel"); 19 cancelBtn.Invoked = CancelBtnClick; 20 msgDialog.Commands.Add(cancelBtn); 21 22 await msgDialog.ShowAsync(); 23 } 24 } 25 //点击“取消”返回什么也不做; 26 private void CancelBtnClick(IUICommand command) 27 { 28 return; 29 } 30 //点击“确定”,退出程序; 31 private void OkBtnClick(IUICommand command) 32 { 33 Application.Current.Exit(); 34 } 35 #endregion
要实现的效果如下:
双击返回键,出现提示窗口,单击“确定”退出应用,点击“取消”就什么也不做;
功能不复杂,但是不会,只好求助万能的Msdn论坛了,后来找到了方法,其中一段重要dome如下:
1 #region 双击退出程序代码 2 3 //双击HardwareButtons.BackPressed; 4 //出现退出提示窗口; 5 //“确定”退出,“取消”返回什么也不做; 6 private async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 7 { 8 if (this.Frame.BackStack.Count == 1)//BackStack集合中只有一个页面(MainPage.xaml)时,出现该窗口; 9 { 10 e.Handled = true; 11 MessageDialog msgDialog = new MessageDialog("你确定退出程序吗?", "注意"); 12 13 //OK Button 14 UICommand okBtn = new UICommand("OK"); 15 okBtn.Invoked = OkBtnClick; 16 msgDialog.Commands.Add(okBtn); 17 18 //Cancel Button 19 UICommand cancelBtn = new UICommand("Cancel"); 20 cancelBtn.Invoked = CancelBtnClick; 21 msgDialog.Commands.Add(cancelBtn); 22 23 await msgDialog.ShowAsync(); 24 } 25 } 26 //点击“取消”返回什么也不做; 27 private void CancelBtnClick(IUICommand command) 28 { 29 return; 30 } 31 //点击“确定”,退出程序; 32 private void OkBtnClick(IUICommand command) 33 { 34 Application.Current.Exit(); 35 } 36 37 #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); } }
修改后的代码如下:
1 private async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 2 { 3 if (this.Frame.BackStack.Count==1) 4 { 5 e.Handled = true; 6 MessageDialog msgDialog = new MessageDialog("你确定退出程序吗?", "注意"); 7 8 //OK Button 9 UICommand okBtn = new UICommand("OK"); 10 okBtn.Invoked = OkBtnClick; 11 msgDialog.Commands.Add(okBtn); 12 13 //Cancel Button 14 UICommand cancelBtn = new UICommand("Cancel"); 15 cancelBtn.Invoked = CancelBtnClick; 16 msgDialog.Commands.Add(cancelBtn); 17 18 await msgDialog.ShowAsync(); 19 } 20 else 21 { 22 e.Handled = true; 23 this.GoBackCommand.Execute(null); 24 } 25 26 }
其中this.Frame.BackStack.Count==1表示页面缓存中只有一个页面时,执行if下dome,否则执行else;
主要修改Common文件夹下NavigationHelper.cs类中返回事件的以上dome就行了,就能实现如上图的效果,
修改的dome不一定按我的这个方法,自己可以根据看书的应用程序需求进行修改,这样会适合你的程序的;
弱者在迷惑恐惧前止步不前,
强者则步步前进;
posted on 2016-04-11 14:10 legendofhungrywolf 阅读(197) 评论(0) 编辑 收藏 举报