Как показать модальное диалоговое окно и отменить навигацию в OnNavigatingFromAsync

При использовании шаблона 10 вам предоставляется возможность отменить ViewModel страницы, отойдя от страницы, переопределив INavigable метод OnNavigatingFromAsync и настройка args.Cancel правда, вот так:

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

Откроется диалоговое окно, однако навигация не отменяется. Это как Т10 игнорирует args.Cancel = true; быть установленным

Я что-то здесь не так делаю? Я просто хочу показать диалог, а затем запретить навигацию..

1 ответ

Решение

Я попробовал ваш модальный на шаблоне 10 (1.1.4) на примере гамбургера, и он работает отлично.

Для меня я думаю, что ваша ошибка в методе "OnNavigatingFromAsync", похоже, что в конце отсутствует "return 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;
        }
Другие вопросы по тегам