locked
[Q] トップに戻る ナビゲーション RRS feed

  • 質問

  • ナビゲーション機能を使って、ページを移動していると、その履歴が残ります。「戻る」ボタンを押せば履歴をたどって戻れます。

    さて、MainPage → Page1 → Page2 → Page3 と移動したときに、Page3に「MainPage」に戻る機能をつけたい。どうしたらエレガントでしょうか?

    Point:やっぱり、MainPageに戻った後は「戻る」ボタンでアプリは終了したいよね ♪

    • 移動 Mike Wang (MSCS) 2012年10月2日 10:56 (移動元:Windows Phone 7 How-to)
    2011年5月10日 18:07

すべての返信

  • こんばんは kazuaki です。
    Page3 → MainPage には 普通に遷移させて MainPage 側で移動の履歴を消せればいいのかなと考えました。
    //Page3.xaml.cs
    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
     base.OnBackKeyPress(e);
    
     if (NavigationService.CanGoBack)
     {
      NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
     }
    }
    
     
    ただ、他のスレッドでも書かれているように Phone7 には NavigationService.RemoveBackEntry() が無いようですので MainPage を終わらせてしまうというのではダメでしょうか?
    調べてみると Silverlight のアプリを終わらせるには XNA の Game.Exit() を使う方法や、わざと例外を投げてアプリケーションを終了させる方法等があるようですが、例外を使うのはあまり好きではないので Game.Exit() で終わらせてみました。
    //MainPage.xaml.cs
    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
     base.OnBackKeyPress(e);
    
     if (NavigationService.CanGoBack)
     {
      new Microsoft.Xna.Framework.Game().Exit();
     }
    }
    

    • 回答の候補に設定 高橋 忍 2011年8月14日 15:56
    2011年5月11日 13:18
  • こんばんは、MOTO SQUAREです。


    現行のWPDT(RTM)ではNavigationService.RemoveBackEntry()が利用できないため、kazuakiさんの記載された実装方法が最もエレガントなのではないかと思います。

    なお、最新の開発環境であるWPDT(7.1β)では、上記のメソッドがサポートされるようになりましたので、以下のように処理を実装することができそうです。

    // Page3.xaml
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
      while (NavigationService.CanGoBack)
      {
        NavigationService.RemoveBackEntry();
      }
      base.OnNavigatedFrom(e);
    }
    

    WP7.1の正式対応が待ち遠しいです。

    • 回答の候補に設定 高橋 忍 2011年8月14日 15:56
    2011年5月28日 13:47