戻るボタンで複数のページを戻る方法
アプリを作っていると戻るボタンを押したときに前のページじゃなくて前の前のページに戻りたいことがあるかもしれません。今の仕様では残念ながら一つ前のページにしか戻らないのでなんらかの手を施す必要があります。
例えば戻るボタンを押したときのイベント(OnBackKeyPress)を補足して強制的にNavigation.Navigateを呼んで戻りたいページにナビゲートする方法がありますが、これだと審査が通らないようです。
そこでもう一つの解決策としてAppインスタンスにbool変数を用意して、その変数がtrueのときは他のすべてのページのOnNavigatedToでNavigation.GoBackを呼び出します。そうすることで目的のページまで戻ることができます。
下記の例はMainPage ⇒ Page2 ⇒ Page3と遷移したのちに戻るボタンを押してMainPageに戻る場合です。
App.xaml.cs
// このフラグがtrueのときは各ページのOnNavigatedToで // NavigationService.GoBackを呼ぶ public bool MustNavigateBack { get; set; }
MainPage.xaml.cs
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); var app = (App)Application.Current; app.MustNavigateBack = false; // 戻ってきた先では必ずfalseにする }
Page2.xaml.cs
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); var app = (App)Application.Current; if (app.MustNavigateBack) { this.NavigationService.GoBack(); } }
Page3.xaml.cs
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) { base.OnBackKeyPress(e); // ここでフラグをtrueにすることで、Page2に戻ったときに // OnNavigatedToでNavigationService.GoBackが呼ばれる。 var app = (App)Application.Current; app.MustNavigateBack = true; }