文章出處
文章列表
不用微軟的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 }
文章列表
全站熱搜