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

  • 0
    いいね
  • 0
    コメント

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