不用微软的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 else 10 { 11 //跳转到程序首页 12 Frame.Navigate(typeof(MainPage)); 13 } 14 //设置事件状态为已处理 15 //重要!! 16 e.Handled = true; 17 }