C# WinUI 3アプリを作っていく途中で、躓いた部分を備忘録的に投稿します。今回はXamlで作成したフォームの最大化・最小化ボタンを無効にする手順です。
Xamlフォームの最大化・最小化ボタン
WinUI 3プロジェクトでは、メインウィンドウがXamlで作成て設定されています。
WinFormsのようにプロパティ画面でタイトルバーの各種ボタンの変更ができないようなので、ウィンドウハンドルを使ってコードから変更を行います。
準備として、メインウィンドウのハンドルを取得しておきます。クラス内で再利用できるように変数を宣言しておきます。
private Microsoft.UI.Windowing.AppWindow m_AppWindow;
ウィンドウのコンストラクター部分で次の様にウィンドウハンドルから取得します。
IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
Microsoft.UI.WindowId windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hWnd);
m_AppWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId);
最後に、OverlappedPresenterを使って、最小化ボタンなどの無効化を行います。
var olp = OverlappedPresenter.Create();
olp.IsMaximizable = false;
//最大化ボタン
olp.IsMinimizable = false; //最小化ボタン
olp.IsResizable = false; //サイズ変更
olp.IsAlwaysOnTop = false; //常に最前面に表示
olp.IsModal= false; //モーダル・モードレス
m_AppWindow.SetPresenter(olp);
追加する場所は、下の画像をご覧ください。
まとめ
今回は、WinUI 3 アプリのタイトルバーに表示される最小化・最大化ボタンなどの変更方法を書きました。
WinFormsの時代とは違って、プロパティ画面で変更ができないため手動でコードを追加して変更します。
C#のWinUI 3アプリの最小化・最大化ボタンを変更したい場合の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。