投稿

12月, 2021の投稿を表示しています

[WinUI 3] WindowのClosingイベントがやっと気軽に使えるようになった!

イメージ
WinUI 3/Project Reunion 0.xでは Window.Closing イベントがなくて、Windowを閉じたときに未保存の注意などを実現するために、 DllImport でWin32 APIを使わざるをえませんでした。 Project ReunionがWindows App SDK 1.0になってから、AppWindow APIを使うことで、簡単にClosingイベントを使えるようになりました! 目次 早速サンプルコード: Windowを閉じようとするとContentDialogを表示させる AppWindow APIを理解する おまけ:AppWindowのTitleBarプロパティでタイトルバーの見た目を変えられる 参考ページ 早速サンプルコード: Windowを閉じようとするとContentDialogを表示させる 必要なnamespace using Microsoft.UI; using Microsoft.UI.Windowing; AppWindow objectを取得する private AppWindow GetCurrentAppWin ( ) { //Windowのハンドルを取得する IntPtr hwnd = WinRT.Interop.WindowNative.GetWindowHandle( this ); //hwndでWindowIdを取得する WindowId winId = Win32Interop.GetWindowIdFromWindow(hwnd); //WindowIdでAppWindow objectを取得して返す return AppWindow.GetFromWindowId(winId); } AppWindow objectを利用してClosing Eventをハンドルする AppWindow thisAppWin = GetCurrentAppWin(); if (thisAppWin != null ) { thisAppWin.Closing += async (s, e) => { //Windowのcloseプロセスをキャンセルす