navigation - 使用 MessageBox 在 Page.OnNavigatingFrom 中取消导航

标签 navigation winrt-async

我有一个两页的 WinRT 应用程序,其中第一个导航到第二个。我想问OnNavigatingFrom的用户如果他真的想通过消息框导航到第二个。导航取消是通过设置 .Cancel=true 来完成的。的 eventargs ...我可以在消息框完成后做。

我的问题是 MessageDialog.ShowAsync是一种异步方法。

1.
做不到 .AsTask().Result ...当然会导致僵局。

2.
无法使用 await ,因为 OnNavigatingFromvoid ,因此使其异步会导致调用者在我等待时立即返回 ShowAsync().AsTask().Result .

最佳答案

无法从 OnNavigatingFrom(NavigatingCancelEventArgs e) 事件处理程序异步取消导航。

如果要防止用户导航离开,则必须在请求导航之前显示对话框。

var dialog          = new MessageDialog("Navigate away ?");
var okCommand       = new UICommand("OK");
var cancelCommand   = new UICommand("Cancel");
dialog.Commands.Add(okCommand);
dialog.Commands.Add(cancelCommand);

var result  = await dialog.ShowAsync();
if(result == okCommand)
{
    (Window.Current.Content as Frame).Navigate(typeof(BlankPage1));
}

关于navigation - 使用 MessageBox 在 Page.OnNavigatingFrom 中取消导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35603141/

相关文章:

css - CSS下拉菜单收缩

jquery - 如何在 jQuery 中为类的每次出现选择类的最后一个元素

android - 操作栏 : Best practice for older Android versions

c# - 如何在 WinRT 应用程序中使用 nUnit 测试?

c# - 在 WinRT 中检查目录是否为空的简单方法(异步 API)

c# - 如何在Windows phone 8.1 中使用streamwriter 和file append?

windows-8 - 从使用 WinJS 读取的文件返回值以在页面中使用

swift - 如何指定各个导航栏的标题颜色? swift

c# - 写入文件时 Json.net 异步

C# Prism导航问题