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
View Code

知道这段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);
            }

        }
View Code

修改后的代码如下:

 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         }
View Code

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

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

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

 

posted on 2016-04-11 14:10  legendofhungrywolf  阅读(197)  评论(0编辑  收藏  举报