かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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