Window.Closedにイベントハンドラを追加し、そのイベントハンドラ内で引数として渡されたイベントのHandled
プロパティをtrue
に設定すればよい。
Windows App SDKのイベントの仕組み
Windows App SDKのイベント処理の仕組みは、Webフロントエンドのそれと似ている。
ここでは説明のため、一旦JavaScriptを考える。
同じイベントをlistenする複数のイベントハンドラが登録されている状況を想像せよ。
例えば<div>
要素の中に<button>
があり、それぞれclickイベントに対するハンドラが設定されているとする。
この状況でbuttonを押すと、通常は次の順番で両方のハンドラが呼び出される。
- buttonのclickイベントのハンドラ
- divのclickイベントのハンドラ
ところが、buttonのイベントハンドラ内でイベントを完全にconsumeして、div要素へのイベントの伝播を阻止することもできる。 詳しくはイベントバブリングやイベントプロパゲーションで調べよ。
話をWindows App SDKに戻す。
恐らくWindow
ベースclassのClosedイベントに反応するハンドラとして、「他にactiveなウィンドウが存在しなければアプリケーションを終了する」という処理が登録されている。
これを阻止するためには、同様にClosedイベントへ反応する優先度の高いハンドラを追加し、そのハンドラ内でイベントの伝播を止めてしまえばよい。
例えば、以下のようなコードが考えられる。
// Closedイベントに反応するイベントハンドラを追加 Window.Closed += (sender, args) => { // trueを設定することで、イベントの伝播を阻止。 args.Handled = true; }; コード中の`Window`は実際には継承したクラス/インスタンス名になる。 テンプレートから名前を変更していない場合は`MainWindow`だろう。