如何取消导航回Windows 10 UWP中按下的后退按钮?

时间:2015-09-16 12:02:04

标签: windows-phone-8.1 winrt-xaml windows-10 windows-rt windows-10-mobile

如何在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;
    }
 }

但是,在Windows 10中我怎么能做同样的逻辑。

我已经尝试过但它不起作用。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();