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

时间:2016-02-22 18:28:05

标签: c# win-universal-app template10

使用Template 10时,您可以通过覆盖INavigable方法OnNavigatingFromAsync并设置{{1}来让页面的ViewModel取消导航离开页面如此:

args.Cancel

这很好用,但是如果我想向用户显示模态对话框(解释导航被取消的原因),我会将方法修改为:

public override Task OnNavigatingFromAsync(NavigatingEventArgs args)
{
    // some logic to determine if navigation should be canceled...
    args.Cancel = true;
    return Task.CompletedTask;
}

这将显示对话框,但导航已取消。就像T10忽略了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(); } 被设置一样。

我在这里做错了吗?我只是想显示对话框然后阻止导航..

1 个答案:

答案 0 :(得分:2)

我在Hamburger Sample上尝试了模板10(1.1.4)上的模态,它运行良好。

对我来说,我认为你的错误是关于方法" OnNavigatingFromAsync",它看起来好像缺少"返回Task.CompletedTask"最后。

对我来说,当我点击应用程序中的后退键时,此代码会阻止应用返回:

 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;
        }