もくじ
https://tera1707.com/entry/2022/02/06/144447#WinUI3
やりたいこと
WInUI3アプリのウインドウの、タイトルバーをなくしたい。
前提
やりかた
OverlappedPresenter
のSetBorderAndTitleBar()
メソッドを使う。
サンプルコード
以前調べた、AppWindowクラスを使ってウインドウを制御するやり方を元に作る。
流れとしては、
OverlappedPresenter
をCreateする。OverlappedPresenter
のインスタンスのSetBorderAndTitleBar()
で、第二引数のhasTitleBar
をfalseにして呼ぶ。- AppWindowに、
OverlappedPresenter
のインスタンスをセットする。
という感じ。
using Microsoft.UI.Windowing; using Microsoft.UI.Xaml; using System; namespace App17 { public sealed partial class MainWindow : Window { private AppWindow m_AppWindow; public MainWindow() { this.InitializeComponent(); IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this); Microsoft.UI.WindowId windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hWnd); m_AppWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId); var op = OverlappedPresenter.Create(); op.IsResizable = false; op.IsAlwaysOnTop = false; op.SetBorderAndTitleBar(true, false); //★ココ m_AppWindow.SetPresenter(op); } } }
これを実行すると下図のようなタイトルバーのないウインドウが出てくる。
備考
op.SetBorderAndTitleBar(true, false);
について、
私が試した限り、第一引数のhasBorder
をfalseにして呼ぶと、ArgumentException
が出てしまう。
もしかしたら、OverlappedPresenter
以外のPresenter(CompactOverlayPresenter
とか)だとうまくうごくのかもしれないが、今回は試さず。
参考
OverlappedPresenter.SetBorderAndTitleBar(Boolean, Boolean) Method