当前位置: 代码迷 >> .NET相关 >> 自个儿写方法处理WP(RT)后退键事件处理
  详细解决方案

自个儿写方法处理WP(RT)后退键事件处理

热度:112   发布时间:2016-04-24 02:51:06.0
自己写方法处理WP(RT)后退键事件处理

不用微软的NavigationHelper,自己写方法处理WP后退键事件

在WP8.1(RT)程序中,你会发现按下后退键时,应用会直接退出,变为后台运行,这是因为RT与Silverlight对后退键的处理不同,在windowsRT应用中需要特殊处理,这里没有使用微软封装好的NavigationHelper

1.进入页面时添加后退键处理事件,退出当前页面移除

方法一

 在页面的构造函数中,添加页面的Load和Unload事件,分别添加和移除对后退键的处理

 

 1         public DetailsPage() 2         { 3             InitializeComponent(); 4             //缓存页面 5             NavigationCacheMode = NavigationCacheMode.Required; 6             //进入页面,注册后退键处理方法 7             this.Loaded += (sender, e) => 8             { 9                 HardwareButtons.BackPressed += HardwareButtons_BackPressed;10             };11             // 退出页面,取消对后退键处理方法的注册12             this.Unloaded += (sender, e) =>13             {14                 HardwareButtons.BackPressed -= HardwareButtons_BackPressed;15             };16         }    

 

方法二

重写页面的“ OnNavigatedTo ”事件和 “ OnNavigatedFrom ”事件,在OnNavigatedTo 事件中注册 后退键处理事件,在 OnNavigatedFrom 事件中取消注册

 1         protected override void OnNavigatedTo(NavigationEventArgs e) 2         { 3             // 注册后退键处理事件 4             // Windows.Phone.UI.Input.HardwareButtons.BackPressed . 5             HardwareButtons.BackPressed += HardwareButtons_BackPressed; 6         } 7  8         protected override void OnNavigatedFrom(NavigationEventArgs e) 9         {10             //取消后退键处理程序的注册11             HardwareButtons.BackPressed -= HardwareButtons_BackPressed;12             base.OnNavigatedFrom(e);13         }

 

2.在后退键事件处理结束后设置 Handled为true

            后退键处理事件Sample,注意:在事件最后一定要设置Handled为true!!否则可能会引起事件的冒泡传递,发生你不想看到的状况

 1         private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 2         { 3             //判断是否可以后退 4             if (Frame.CanGoBack) 5             { 6                 //退到上一个页面 7                 Frame.GoBack(); 8             } 9             else10             {11                 //跳转到程序首页12                 Frame.Navigate(typeof(MainPage));13             }14             //设置事件状态为已处理15             //重要!!16             e.Handled = true;17         }

 

  相关解决方案