2

テンプレート 10を使用する場合、次のように、INavigableメソッドOnNavigatingFromAsyncをオーバーライドして true に設定することで、ページの ViewModel がページからの移動をキャンセルする機会が与えられます。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();           
}

これによりダイアログが表示されますが、ナビゲーションはキャンセルされません。T10がargs.Cancel = true;設定を無視しているようです。

ここで何か間違ったことをしていますか?ダイアログを表示して、ナビゲーションを禁止したいだけです..

4

1 に答える 1

2

ハンバーガー サンプルのテンプレート 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;
        }
于 2016-02-23T22:53:32.267 に答える