酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでNavigationServiceを使ってルートページまで戻る

iPhoneではTabBarControllerというものがあり、ドリルダウン式に画面遷移させることができます。メモリの許す限りドリルダウンをさせることができ、n階層まで潜った状態からでも現在表示させているタブをタップすると、一気にルートページに戻ることができます。

Windows PhoneでもNavigationServiceと呼ばれる機構が存在しており、画面遷移をスタック的に管理しています。例えば、ページAからページB、ページBからページCと画面遷移をおこなった場合に、ルートのページ(ここではページA)まで戻る方法がWindows Phone OS 7.0では提供されていませんでした。

Windows Phone OS 7.1ではいくつかのメソッドが追加されました。

  • NavigationService.BackStackプロパティ
  • NavigationService.RemoveBackEntryメソッド

BackStackプロパティで履歴スタックの数が取得でき、RemoveBackEntryメソッドを実行するごとに履歴スタックに積まれた最新のページを削除することができるようになりました。

これらのメソッドを用いて履歴スタックの数だけ履歴を削除することで、ルートページまで一気にさかのぼることが可能です。

では、最後にコードです。単純にルートページを残して遷移スタックを削除しているだけというのが分かるかと思います。

// 画面遷移の履歴スタック数を取得する
int stackCount = NavigationService.BackStack.Count();
// ルートページのみを残して遷移スタックを削除
for (int i = 0; i < stackCount - 1; i++) {
    NavigationService.RemoveBackEntry();
}
// ルートページへ戻る
NavigationService.GoBack();