【发布时间】:2017-09-13 19:12:50
【问题描述】:
我在信中遵循了 MS 示例,但我仍然遇到了一个奇怪的问题。让我解释一下:)
我的应用有 3 个页面。主要、添加和帮助。 Main 允许使用带有 args 的 .Navigate 去添加。 添加允许使用不带参数的 .Navigate 转到帮助。 添加允许使用后退按钮或取消按钮(取消按钮使用 GoBack())返回 Main。 帮助只能使用返回按钮返回添加。
我的代码在主页上定义返回请求非常简单:
在 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是OK的。但是当我遇到问题时,BackRequested 事件处理程序确实被调用了两次(两次是因为我点击了“CanGoBack == false”,我认为它),就像它卡在一个循环中一样。 有什么想法吗?
谢谢。
【问题讨论】:
-
我很确定它也会为我做这件事,但根据我的阅读,e.Handled = true;应该已经向所有其他事件处理程序(如果它们存在)发出信号,不要处理该事件。我看错了吗?
-
并非如此。如果您看到我的问题的答案,则提供了解释,并且当时我能够在移动和桌面平台上复制相同的场景。这就是我在两个平台上彻底测试后将其标记为已接受的原因。我希望那时微软的文档能更清楚一点。
-
确实,还不是很清楚。我在下面说过,非常感谢您,您的帖子非常好:)
标签: uwp windows-10-universal back-button