你的位置:首页 > 操作系统

[操作系统]自己写方法处理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     }