如何在 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;设置一样。

我在这里做错了什么吗?我只想显示对话框,然后阻止导航。

如何在 OnNavigatingFromAsync 中显示模式对话框和取消导航

我在汉堡样本上的模板 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;
        }