LoginSignup
11
11

More than 5 years have passed since last update.

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

Posted at

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にする。
遷移前のテキストボックスなどの状態を保持したい場合はこの仕組みを利用する。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11