がりらぼ

WindowsRuntimeの応援ブログ

WindowsPhoneで画面遷移

どうも。最近倫理の単位を落としたがりっちです。
ひょんなことからWindowsPhone7でアプリを作ることになったのでメモ書き。
WindowsPhoneで画面遷移をするにはNavigationServiceクラスのNavigateメゾッドを使います。
引数に遷移先のxamlファイル、値を受け渡すにはクエリ文字を使います。

NavigationService.Navigate(new Uri("/SubPage.xaml?Name="+this.textBox1.Text,UriKind.Relative));

第2引数にUriKind.Relativeと指定しているおかげで/SubPage.xaml相対パスで指定することができます。

遷移先では、OnNavigatedToメゾッドをオーバーライドし、値を取得します。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

IDictionary<string, string> param = NavigationContext.QueryString;

this.textBlock1.Text = "こんにちは" + param["Name"] + "さん";

base.OnNavigatedTo(e);

}

param[""]の中にキーを入れることで識別できるっポイですね。インデクサーかな?
NavigationServiceクラスのGoBackメゾッドで遷移元に戻ることができます。

サンプル
MainPage.xaml.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using Microsoft.Phone.Controls;

namespace PhoneApp1

{

public partial class MainPage : PhoneApplicationPage

{

// コンストラクター

public MainPage()

{

InitializeComponent();

}

private void button1_Click(object sender, RoutedEventArgs e)

{

//テキストボックスに値が入っているか判定

if (this.textBox1.Text == String.Empty)

{

MessageBox.Show("名前を入力してください");

return;

}

else

{

//SubPage.xamlにNameキーを指定して遷移

NavigationService.Navigate(new Uri("/SubPage.xaml?Name="+this.textBox1.Text,UriKind.Relative));

}

}

}

}


SubPage.xaml.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using Microsoft.Phone.Controls;

namespace PhoneApp1

{

public partial class SubPage : PhoneApplicationPage

{

public SubPage()

{

InitializeComponent();

}

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

//クエリキー取得

IDictionary<string, string> param = NavigationContext.QueryString;

this.textBlock1.Text = "こんにちは" + param["Name"] + "さん";

base.OnNavigatedTo(e);

}

private void button1_Click(object sender, RoutedEventArgs e)

{

//遷移元へ返す

NavigationService.GoBack();

}

}

}


クエリ文字を指定しやすくなるクラスをそのうちつくろうかな...