【问题标题】:how to cancel navigate back on back button pressed in Windows 10 UWP?如何取消在 Windows 10 UWP 中按下的后退按钮导航?
【发布时间】:2023-04-11 06:07:01
【问题描述】:

如何在 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 中,我该如何做同样的逻辑。

我试过了,但是没用。

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    对于硬件返回按钮,您可以使用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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      相关资源
      最近更新 更多