かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Universal Windows Platform appでタイトルバーに戻るボタンを出す方法 その2

okazuki.hatenablog.com

先日、UWP appのタイトルバーに戻るボタンを出す方法を書きましたが、ストアのアプリを見てると戻れないときは戻るボタン出さないようになってるっぽいです。

ということで、そういう風にハンドリングするにはどうするかというのを紹介します。

とりあえず、戻れるときは戻るボタンを出すということなので、こんなメソッドを用意します。

private void UpdateBackButtonState()
{
    var rootFrame = (Frame)Window.Current.Content;
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = rootFrame.CanGoBack ?
        AppViewBackButtonVisibility.Visible :
        AppViewBackButtonVisibility.Collapsed;

}

そして、起動時と画面遷移後にこのメソッドを呼ぶようにします。App.xaml.csのOnLaunchedでrootFrameを作ったあとくらいにこんなコードを足します。

this.UpdateBackButtonState();
rootFrame.Navigated += (_, __) => this.UpdateBackButtonState();
SystemNavigationManager.GetForCurrentView().BackRequested += (_, args) =>
{
    if (rootFrame.CanGoBack)
    {
        rootFrame.GoBack();
        args.Handled = true;
    }
};

適当に2画面作って画面遷移させるようにして様子を見ます。

起動直後の画面では戻るボタンが出ません。

f:id:okazuki:20150712140505p:plain

画面遷移すると戻るボタンが出ます。当然ボタンを押すと戻ります。

f:id:okazuki:20150712140553p:plain