Как показать модальное диалоговое окно и отменить навигацию в 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;
}