[Windows ストア アプリ] ページ間ナビゲーション3

今回は、ページ間でのデータの受け渡しについて説明します。

あるページから、ほかのページに遷移するためには Frame.Navigateメソッドを使用します。このメソッドの第2引数には、遷移先のページに渡したいデータをセットすることができます。

遷移元のコード例は以下の通りです。

遷移先はSubPageで、遷移先に渡すデータはtextBox1.Textとしています。

VBの例

Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    Me.Frame.Navigate(GetType(SubPage), TextBox1.Text)
End Sub

C#の例

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(SubPage), textBox1.Text);
}

次に、遷移先ですが、遷移元から送られてきたデータを受け取るには、navigationHelper_LoadStateイベントを使用します。このイベントの第2引数LoadStateEventArgsの NavigationParameter に遷移元のデータが入っています。

以下は、遷移元のページから送られてきたデータを、navigationHelper_LoadStateイベントで受け取って、TextBlockコントロールに表示する例です。

VBの例

Private Sub NavigationHelper_LoadState(sender As Object, e As Common.LoadStateEventArgs)
    Me.TextBlock1.Text =
        e.NavigationParameter.ToString()
End Sub

C#の例

private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
    textBlock1.Text =
        e.NavigationParameter.ToString();
}

 

[Windows ストア アプリ] ページ間ナビゲーション2

前回はページ間の移動について説明し、最後の方で「ページを移動した後に、入力しておいた文字が消えてしまう」ことについても説明をしました。

この問題は、NavigationCacheModeEnabledに設定することで、解決できます。

コード例は以下の通りです(コンストラクタの中で設定しています)。

VBの例

Public Sub New()

    ' この呼び出しはデザイナーで必要です。
    InitializeComponent()

    Me.NavigationCacheMode = 
        Navigation.NavigationCacheMode.Enabled;
End Sub

C#の例

public MainPage()
{
    this.InitializeComponent();

    this.NavigationCacheMode = 
        Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
}

では実行例を見てみましょう。(ページ移動についてのコードは、前回のコードを参照してください)。

前回同様、TextBoxには「ページ遷移のテスト」と入力して、ButtonをクリックするとSubPageへ移動します。

ページ遷移の例

ページ遷移の例

次に、タイトル「My Application」の左側に表示されている[←]ボタンをクリックします。

最初に表示されていたページに戻ります。TextBoxには入力してあった「ページ遷移のテスト」という文字が残っていることを確認できます。

入力されていた文字が残っていることを確認

 

 

[Windows ストア アプリ] ページ間ナビゲーション1

今回は、Windows ストア アプリで、別ページへ移動する方法について説明します。

Windowsアプリケーションの場合は、別ページ(というかWindowですね)に移動する場合は Showメソッドや ShowDialogメソッドを使用します。

Windows ストアの場合は、Frame.Navigateメソッドを使用します。

たとえば、Buttonがクリックされたときに SubPage.xaml へ移動するときは以下のようなコードを記述します。

VBの例

Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    Me.Frame.Navigate(GetType(SubPage))
End Sub

C#の例

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(SubPage));
}

実行例は以下の通りです。

画面には、TextBoxコントロールとButtonコントロールを貼り付けただけのシンプルなページです。
TextBoxには「ページ遷移のテスト」と入力しています。
Buttonをクリックすると、タイトルが「My Application」と書かれたSubPageへ移動します。

ページ遷移の例

ページ遷移の例

以上のように、ページの移動をすることは非常に簡単です。

今度は、SubPageに表示されているタイトル「My Application」の左隣にある[←]を押してみましょう。
遷移元であるMainPageに戻ります(下図)。

遷移元のMainPage

よく見ると、TextBoxに入力していた「ページ遷移のテスト」という文字が消えています。

せっかく入力したデータが消えてしまっては困るばあいもあると思います。

この件については解決法がありますので、次回説明することとします。

[Windows ストア アプリ] ページを遷移する

Windows ストア アプリで別のページへ移動したい場合には PageクラスのFrameプロパティが持つNavigateメソッドを使用します。

たとえば、ButtonがクリックされたときにBasicPage1.xamlへ移動したい場合には下記のようにします。

C#の例

private void button01_Click(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(BasicPage1));
}

[Windows ストア アプリ] スタートページを変更する

Visual StudioでWindows ストア アプリを作成すると、スタートページはMainPage.xamlとなります。

任意のページをスタートページに設定するには、App.xamlを編集します。

OnLaunchedイベントの中に下記コードがあります。

6行目のMainPageを任意のページを指定することで、スタートページを変更することができます。

if (rootFrame.Content == null)
{
    // ナビゲーション スタックが復元されていない場合、最初のページに移動します。
    // このとき、必要な情報をナビゲーション パラメーターとして渡して、新しいページを
    // 構成します
    if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
    {
        throw new Exception("Failed to create initial page");
    }
}

たとえば、BasicPage1.xamlをスタートページに変更するには、下記のように変更します。

if (rootFrame.Content == null)
{
    // ナビゲーション スタックが復元されていない場合、最初のページに移動します。
    // このとき、必要な情報をナビゲーション パラメーターとして渡して、新しいページを
    // 構成します
    if (!rootFrame.Navigate(typeof(BasicPage1), args.Arguments))
    {
        throw new Exception("Failed to create initial page");
    }
}