我們知道在win10手機上和平板上都會有後退鍵,那麼PC上該怎麼辦呢?沒關係我們慢慢揭曉。 如果你已經是UWP的忠實用戶,那麼肯定會見到如下的後退鍵。 那麼我們如何來做出來呢?, 我們首先打開App.xaml.cs文件,在OnLaunched方法中Frame對象初始化完畢以後訂閱Navigated事
我們知道在win10手機上和平板上都會有後退鍵,那麼PC上該怎麼辦呢?沒關係我們慢慢揭曉。
如果你已經是UWP的忠實用戶,那麼肯定會見到如下的後退鍵。
那麼我們如何來做出來呢?,
我們首先打開App.xaml.cs文件,在OnLaunched方法中Frame對象初始化完畢以後訂閱Navigated事件,在Frame導航後需要判斷是否顯示後退鍵(因為首頁就沒必要顯示後退鍵了)。
rootFrame.Navigated += RootFrame_Navigated;
然後在RootFrame_Navigated方法中顯示出後退鍵。
1 private void RootFrame_Navigated(object sender, NavigationEventArgs e) 2 { 3 if ((Window.Current.Content as Frame).BackStack.Any()) 4 { 5 SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; 6 } 7 else 8 { 9 SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; 10 } 11 }
我們通過Frame的導航堆棧中是否存在元素來判斷,如果不存在元素,就說明此時處於首頁,就沒必要顯示後退鍵。
雖然現在後退鍵顯示出來了,但是我們還沒有對其作出後退響應,接下來我們訂閱SystemNavigationManager對象的BackRequested事件。
1 SystemNavigationManager.GetForCurrentView().BackRequested += App_BackRequested;
在App_BackRequested方法中我們來進行後退鍵的響應。
1 private void App_BackRequested(object sender, BackRequestedEventArgs e) 2 { 3 var rootFrame = Window.Current.Content as Frame; 4 if (!rootFrame.CanGoBack) return; 5 rootFrame.GoBack(); 6 }
此時,我們點擊後退鍵就可以返回了。可是當我們把app部署到手機上時我們又會發現一個問題,不論處於哪個頁面,一按後退鍵就會直接退出app。這是因為我們在App_BackRequested方法中並沒有對退出app做攔截。需要添加一句代碼e.Handled = true; 更改後代碼如下:
1 private void App_BackRequested(object sender, BackRequestedEventArgs e) 2 { 3 var rootFrame = Window.Current.Content as Frame; 4 if (!rootFrame.CanGoBack) return; 5 rootFrame.GoBack(); 6 e.Handled = true; 7 }
此時,不管Mobile還是PC,都可以完美的處理後退請求了。我們來看一下效果。