1

如何取消當前頁面以在Windows 10 UWP中按下後退按鈕時導航回去?如何取消在Windows 10 UWP中按下後退按鈕導航?

在的Windows Phone 8或8.1的Silverlight我可以這樣寫代碼,並處理它

private void PageBackKeyPress(object sender, CancelEventArgs e) 
{ 
    if (MGMethods.DisplayMessageWithButton(MessageText)) 
    { 
     //Can Navigate Back 
    } 
    else 
    { 
     //Stop to Navigate back 
     e.Cancel = true; 
    } 
} 

但是,我怎麼能這樣做同樣的邏輯窗口10。

我已經嘗試過但它不起作用。

+0

的可能重複[返回處理的Windows導航10(UWP)(https://stackoverflow.com/questions/31832309/handling-back-navigation-windows-10-uwp) –

回答

2

SystemNavigationManager可讓您響應用戶按下系統提供的後退按鈕,如硬件按鈕。要使您的應用程序能夠響應系統後退導航事件,請致電GetForCurrentView以獲取與當前視圖關聯的SystemNavigationManager對象,然後爲BackRequested事件註冊事件處理程序。您的應用只會收到該活動的前臺應用。如果處理BackRequested事件,請將BackRequestedEventArgs.Handled屬性設置爲true以將事件標記爲已處理。如果您認爲處理不標記的情況下,系統決定是否從導航應用(在移動設備上的家庭)的距離或忽略的事件(桌面上的器件系列):

Windows.UI.Core.SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; 
Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += (s,a) => 
{ 
    Debug.WriteLine("BackRequested"); 
    if (Frame.CanGoBack) 
    { 
     Frame.GoBack(); 
     a.Handled = true; 
    } 
} 

Source: MSDN

0

對於硬件後退按鈕,您可以使用BackPressed事件:

HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 
     { 
      e.Handled = true; 
     } 

或清除棧如果沒有其他重要棧項目:

this.Frame.BackStack.Clear(); 

或者:

var frame = Window.Current.Content as Frame; 
frame.BackStack.Clear();