2

エミュレーターの一部のインスタンスで、ハードウェアの戻るボタンをクリックすると、コンストラクターが呼び出された状態でバックページが読み込まれ、コンストラクターが呼び出されないという問題が発生しました。これはなぜですか? これはエミュレーターだからですか?

4

1 に答える 1

0

ナビゲーションはどのように行っていますか?アニメーションを実行するために最初の OnNavigatingFrom をキャンセルし、アニメーションの完了後に再びナビゲーションの開始を聞いていますか?

protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
{
    if (_pendingNavigation == null)
    {
        VisualStateManager.GoToState(this, "LeavingPage", true);
        _pendingNavigation = e.Uri;
        e.Cancel = true;
    }

    base.OnNavigatingFrom(e);
}

void LeavingPage_Completed(object sender, EventArgs e)
{
    var uri = _pendingNavigation;
    NavigationService.Navigate(uri);
    _pendingNavigation = null;
}

このバグは、NavigationService.Navigate() を呼び出したときに発生し、新しいページ インスタンスがナビゲーション スタックに追加されます。このバグを修正するには、最初のページ ナビゲーションが「新規」ナビゲーションであることを確認する必要があります。そのようなもの:

if (e.NavigationMode == NavigationMode.New && _pendingNavigation == null)
{
    VisualStateManager.GoToState(this, "LeavingPage", true);
   _pendingNavigation = e.Uri;
   e.Cancel = true;
}
于 2012-10-01T18:22:22.743 に答える