如何在 OnNavigatingFromAsync 中显示模式对话框和取消导航
本文关键字:对话框 取消 导航 模式 显示 OnNavigatingFromAsync | 更新日期: 2023-09-27 18:35:40
使用模板 10 时,您有机会让页面的 ViewModel 通过重写INavigable
方法OnNavigatingFromAsync
并将args.Cancel
设置为 true 来取消离开页面的导航,如下所示:
public override Task OnNavigatingFromAsync(NavigatingEventArgs args)
{
// some logic to determine if navigation should be canceled...
args.Cancel = true;
return Task.CompletedTask;
}
这工作得很好,但是如果我想向用户显示一个模式对话框(解释为什么取消导航),我会将方法修改为:
public async override Task OnNavigatingFromAsync(NavigatingEventArgs args)
{
args.Cancel = true;
ContentDialog dlg = new ContentDialog()
{
Title = "Bad",
Content = "no no no!",
PrimaryButtonText = "OK",
SecondaryButtonText = "NO"
};
await dlg.ShowAsync();
}
这将显示对话框,但导航不会取消。就像 T10 忽略了args.Cancel = true;
设置一样。
我在这里做错了什么吗?我只想显示对话框,然后阻止导航。
我在汉堡样本上的模板 10 (1.1.4) 上尝试了您的模态,它运行良好。
对我来说,我认为您的错误在于"OnNavigatingFromAsync"方法,看起来最后缺少"返回任务.已完成任务"。
对我来说,当我单击应用程序中的后退键时,此代码会阻止应用程序返回:
public override Task OnNavigatingFromAsync(NavigatingEventArgs args)
{
args.Cancel = true;
ContentDialog dlg = new ContentDialog()
{
Title = "Bad",
Content = "no no no!",
PrimaryButtonText = "OK",
SecondaryButtonText = "NO"
};
dlg.ShowAsync();
return Task.CompletedTask;
}