2022/1/13 初始化
2023/8/11 更新
使用 WindowChrome 后,WPF 需要自己处理最大最小化,但无法触发 Windows 11 的 Snap Layouts 功能。目前的主要解决方案是劫持 WM_NCHITTEST 事件,并返回 HTMAXBUTTON = 9。然而,在 .net framework 4.5.2 上无法完美解决,只有在全屏时才能调出 Snap Layouts,可能与另一个 Windows 的 Size 事件有关,具体原因尚不清楚。
鼠标 HitTest 事件 WM_NCHITTEST 消息 (Winuser.h) - Win32 apps | Microsoft Docs
-
Should WPF add the new theme for Windows11 style? · Issue #4749 · dotnet/wpf (github.com)
-
MahApps Windows 11 integration · Issue #4140 · MahApps/MahApps.Metro (github.com)
-
ControlzEx 已经添加支持 https://github.com/ControlzEx/ControlzEx/pull/151
重写了 NCHITTEST 这个应该就是最终解决方案了:https://github.com/ControlzEx/ControlzEx/blob/bd307541058cd21abed7b3d4553d24dfd05ad52f/src/ControlzEx/Behaviors/WindowChrome/WindowChromeBehavior.MessageHandling.cs#L442C33-L442C33
其他项目,Electron 的最新版本已经支持,Firefox 在稳定版 94 中增加了支持,UWP 原生就可以。
Firefox 1718629 - Windows 11 Snap Layouts menu doesn't appear while hovering (mozilla.org)
Windows Terminal Snap Layouts Support: WM_NCHITTEST should return HTMAXBUTTON, HTMINBUTTON, ... for caption buttons · Issue #9443 · microsoft/terminal (github.com)
UWP 自定义标题栏 Window.SetTitleBar(UIElement) Method (Windows.UI.Xaml) - Windows UWP applications | Microsoft Docs