UWP:我的应用程序上的后退按钮有问题

UWP : Issue with the backbutton on my app

我按照信中的 MS 示例进行操作,但仍然遇到一个奇怪的问题。让我解释一下:)

我的应用程序有 3 个页面。主要、添加和帮助。 Main 允许使用 .Navigate with args 去添加。 添加允许使用不带参数的 .Navigate 转到帮助。 Add 允许使用后退按钮或取消按钮返回 Main(取消按钮使用 GoBack())。 帮助只能使用后退按钮返回到添加。

我的代码在主页上非常简单地定义了返回请求:

在 OnNavigatedTo() 中:

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
            SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;

事件处理程序:

private void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
        {
            if (this.Frame.CanGoBack)
            {
                this.Frame.GoBack();
                e.Handled = true;
            }
        }

我的问题如下:

调试的时候,backstack是可以的。但是当我遇到我的问题时,BackRequested 事件处理程序确实被调用了两次(两次是因为我假设我点击了 "CanGoBack == false"),就像它陷入了循环。 有什么想法吗?

谢谢。

确保只将单个事件处理程序连接到事件。您可以尝试使用 -= 语法删除之前的任何一个:

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
var nav = SystemNavigationManager.GetForCurrentView();
nav.BackRequested -= MainPage_BackRequested; //remove any event handler
nav.BackRequested += MainPage_BackRequested;

首先,感谢@mm8 和@AVK。 你没看错,是多次注册的事件。但是在再次添加之前删除处理程序在我的情况下确实不起作用(而且我根本不明白为什么,因为调试器显示它正在经历“-=”但并没有真正删除它因此每隔我回到主页的时间。

因此,我听从了@AVK 问题 () 中 Martin Zikmund 的建议,因为它看起来干净多了。而不是仅仅在 OnLaunched 的末尾添加事件处理程序(基本上,如果您在应用程序已经 运行 时再次启动该应用程序,您将注册另一个处理程序),我将其添加到 if(rootFrame == null ){ 部分。这样看来效果还不错。

遗憾的是,MS 给出的关于处理后退按钮的每条建议都是错误的,你不觉得吗?