我有一个两页的 WinRT 应用程序,其中第一个导航到第二个。我想问OnNavigatingFrom
的用户如果他真的想通过消息框导航到第二个。导航取消是通过设置 .Cancel=true
来完成的。的 eventargs
...我可以在消息框完成后做。
我的问题是 MessageDialog.ShowAsync
是一种异步方法。
1.
做不到 .AsTask().Result
...当然会导致僵局。
2.
无法使用 await
,因为 OnNavigatingFrom
是 void
,因此使其异步会导致调用者在我等待时立即返回 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/