step-5:「戻る」の実装
さて、これでmainPageからPage2に移動できたんだけど、「戻る」ことができません。まず[戻る]ボタンの表示から。
Page2の中に[戻る]ボタンを置き、それが押された時のイベントを捕まえて云々……でももちろんOKなのですが、「戻る」に必要な基本機能はUWPフレームワークが用意してくれてます。
App.xamlのコードビハインド:App.xaml.cppで定義されたOnLaunchの末尾に、「ページの移動が行われた」イベントに反応するイベントハンドラ:RootFrame_Navigatedをアタッチします。


RootFrame_Navigated()ではUWPフレームワークが持っている「バックスタック」を利用します。バックスタックはページ移動のたびに移動先がpushされ、「戻る」たびにpopされて元のページに移動してくれます。バックスタックが空のときはそれ以上戻ることができない(すなわちアプリ起動時のページ)わけで、そのときは[戻る]ボタンを表示しちゃいけません。rootFrame->CanGoBackが「現ページから戻れるか否か」を現していて、その値(true/false)に応じて[戻る]ボタンを見せたり/隠したりしています。

まだ[戻る]ボタン押しても戻れません。ボタンを表示しただけで、戻る処理を書いてませんから。「戻れって言われた」イベントを捕まえて、ちゃんと戻りましょう。


お疲れさまでした。
以上、C#で行われた小一時間のハンズオン・セミナーのC++/CXによる再演を試みました。確かにC#の方が実装が楽ではありますが、かといってC++/CXが並外れて面倒/難解だとは感じませんでした(僕がC++に慣れているからということもありますが)。ただやはり、UWPで多用される非同期処理が厄介です。これがもっと手軽に/楽に書ければと思います。
