UWP應(yīng)用中處理返回事件
UWP應(yīng)用由于能被窗口化,我們能夠在一些系統(tǒng)自帶應(yīng)用如:設(shè)置、Groove Music中看到在標(biāo)題欄上的返回按鈕,而在Windows 10 Mobile上按下返回按鈕會回到上一個頁面。
在WP8.1中,我們要在每個頁面處理返回事件往往要重寫硬件返回按鈕事件。
既然要統(tǒng)一全平臺,我們想在PC上有標(biāo)題欄的情況下,提供標(biāo)題欄返回按鈕,平板上的任務(wù)欄上回 有返回按鈕,手機(jī)上的返回按鈕都能很好的工作。
UWP中提出這種解決方案,感謝好人阿迪王。
為了不在每個頁面的導(dǎo)航中重復(fù)的寫一樣的代碼。我們想到在App.xaml.cs中悶聲發(fā)大財。
打開這個文件,在里面找到OnLaunched這個方法,這個方法會在應(yīng)用正常運行的時候執(zhí)行。我們在這個方法中添加幾句代碼。
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
//加上這句訂閱Frame的導(dǎo)航事件
rootFrame.Navigated += OnNavigated;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
}
Window.Current.Content = rootFrame;
//加上下面兩句,訂閱返回事件
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackrequested;
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = rootFrame.CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}
既然訂閱了事件,我們就要寫這些事件的處理程序。
private void OnNavigated(object sender, NavigationEventArgs e)
{
//根據(jù)頁面是否可以返回,在窗口顯示返回按鈕
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = ((Frame)sender).CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}
private void OnBackrequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack)
{
e.Handled = true;//這句一定要有,不然還會發(fā)生默認(rèn)返回鍵操作
rootFrame.GoBack();
}
}
就是這么簡單,就可以愉快的返回了。