Posted at

UWPアプリの画面ライフサイクル メモ

More than 3 years have passed since last update.

UWPアプリ開発初心者です。

画面遷移周りを調べてみたのでメモ。


画面遷移

画面遷移したいときはFrame.Navigate(Type)を利用。

第2引数のObjectにパラメータを渡せば、ページ遷移時に任意のパラメータの受け渡しが可能。

PageAからPageBに遷移する場合はPageAで以下を呼ぶ。

// パラメータなし

Frame.Navigate(typeof(PageB));

// パラメータあり
Frame.Navigate(typeof(PageB), "パラメーター");


ページ遷移時のイベント

ページ遷移時に遷移元、遷移先で呼び出されるメソッド。

・OnNavigatedTo

・OnNavigatingFrom

・OnNavigatedFrom

詳細は後述するが、通常以下のシーケンスで呼ばれる

遷移元
遷移先

OnNavigatingFrom

OnNavigatedFrom

OnNavigatedTo


OnNavigatedTo

Page.OnNavigatedTo(NavigationEventArgs)

遷移先のページがアクティブになる前に呼び出される。

AndroidのonCreateの様な生成時のみ呼ばれるイベントは無いようです。

Windows
Android
iOS

画面生成時

onCreate
viewDidLoad

前面移動前
OnNavigateTo
onResume
viewWillAppear

前面移動後

viewDidAppear


OnNavigatingFrom

Page.OnNavigatingFrom(NavigationEventArgs)

遷移元のページがディアクティブになる前に呼び出される。

このタイミングではまだページ遷移をキャンセルすることが可能。

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)

{
// キャンセルフラグをtrueにする
e.Cancel = true;
base.OnNavigatingFrom(e);
}


OnNavigatiedFrom

Page.OnNavigatedFrom(NavigationEventArgs)

遷移元のページがディアクティブになった後に呼び出される。

Windows
Android
iOS

後面移動前
OnNavigatingFrom
onPause
viewWillDisappear

後面移動後
OnNavigatedFrom

viewDidDisappear

画面破棄時

onDestroy


NavigationMode

AndroidではonCreate/onResumeでイベントが分かれていたり、画面遷移時にstartAcitivty()/startActivityForResult()などを使い分けて、初回表示時と遷移先画面から戻ってきたときの処理を分けたりできるかと思いますが、Windowsではどうやるのか。

ハンドルするイベントは同じになるが、引数のNavigationEventArgsNavigationModeプロパティで判断できる。

以下のモードがある。

・New

・Back

・Forward

・Refresh

操作
NavigationMode

Frame.Navigate()
New

Frame.GoForward()
Forward

Frame.GoBack()
Back

バックキー押下
Back

??
Refresh


NavigationCacheMode

上述したFrame.GoForward()やFrame.GoBack()はフレームの履歴からページ遷移する方法。

// GoBack

if (Frame.CanGoBack())
{
Frame.GoBack();
}

// GoForward
if (Frame.CanGoForward())
{
Frame.GoForward();
}

フレームに履歴を残すにはFrameのNavigationCacheModeプロパティをEnabled or Requiredにする。

遷移前のテキストボックスなどの状態を保持したい場合はこの仕組みを利用する。