酢ろぐ!

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

Windows Phone 7.0でBackボタンを押された時にルートページまで戻る

Windows Phone 7.1からはNavigationServiceで画面遷移の履歴を制御できるようになりました。

Windows Phone 7.0ではこの方法が提供されていませんでした。MainPage -> Page1 -> Page2 と画面遷移していき、Page2でBackボタンを押下した際にMainPageまで戻れる方法があるのか?を考えてみました。

MainPageでは、クリックするとPage1へ遷移するボタンを用意します。

    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
        }
    }

Page1 では、クリックするとPage2へ遷移するボタンを用意します。さらにOnNavigatedToメソッドでは、Page1へ「戻って」きた場合にMainPageまで戻るようにします。

    public partial class Page1 : PhoneApplicationPage
    {
        public Page1()
        {
            InitializeComponent();
        }

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnBackKeyPress(e);
            if (NavigationService.CanGoBack)
            {
                e.Cancel = true;
                NavigationService.GoBack();
            }
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative));
        }
    }

Page2では特になにも実装しません。

    public partial class Page2 : PhoneApplicationPage
    {
        public Page2()
        {
            InitializeComponent();
        }
    }

ちなみにこの方法は途中でロック画面などアプリが一旦終了してしまった場合に使えませんので、Isolated Storageなどにフラグを保存しておく必要があるかもしれません。

参照