酢ろぐ!

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

Windows PhoneでNavigationServiceを使って画面遷移を行う

概要

Silverlightアプリケーション内の画面遷移を行うための機能を提供しています。

名前空間:System.Windows.Navigation

System.Object
 +--System.Windows.Navigation.NavigationService

Tips

NavigationServiceを使って画面遷移を行う

PhoneApplicationPageインスタンスは、NavigationServiceプロパティを持っています。このNavigationServiceプロパティを利用して画面遷移を行います。

画面遷移先はUriオブジェクトを用いて指定します。URLはルートからのxamlの場所を指します。

f:id:ch3cooh393:20150302170447p:plain

画面遷移を行う

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

パラメータ付きで画面遷移を行う

画面遷移元のページから遷移先へのページに対してURLにクエリ文字列を追記して渡すことが可能です。

例えば、ボタンがタップすると下記のURLに遷移させた場合です。「?」から始まるのがクエリ文字列で、その中の「&」で区切られた文字列が「キー=値」の形で定義されています。

/SubPage.xaml?index=1&title=sub_page

遷移先のページでパラメータに含まれているindextitleの値を取得するためにどうすれば良いのか実装してみましょう。

private void button1_Click(object sender, RoutedEventArgs e)
{
  NavigationService.Navigate(
      new Uri("/SubPage.xaml?index=1&title=sub_page"));
}

indextitleがそれぞれ存在しているかどうかを確認した上で、QueryStringプロパティから値を取得させています。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // クエリ文字列を取得する
    var query = NavigationContext.QueryString;
    
    // クエリ文字列に「index」があるかどうかをチェックする
    if (query.ContainsKey("index")) {
        var index = query["index"];

        // 例) indexを使ってWebAPI等から情報を収集する
    }

    // クエリ文字列に「title」があるかどうかをチェックする
    if (query.ContainsKey("title")) {
        // titleが含まれていればページタイトルとして設定する
        PageTitle.Text = query["title"];
    }
}

参照