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 应用程序 | Microsoft Docs
-
WPF 是否应该添加新的 Windows 11 样式主题?・Issue #4749・dotnet/wpf (github.com)
-
为自定义标题栏 (WindowChrome) 添加对 Windows 11 “Snap Layout” 的支持・Issue #4825・dotnet/wpf (github.com)
-
MahApps Windows 11 集成・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 原生支持。
VSCode VS Code 的最大化按钮在 Windows 11 中不触发 Snap Layouts・Issue #127449・microsoft/vscode (github.com)
Firefox 1718629 - Windows 11 Snap Layouts 菜单在悬停时不显示 (mozilla.org)
Windows Terminal Snap Layouts 支持:WM_NCHITTEST 应返回 HTMAXBUTTON、HTMINBUTTON 等用于标题按钮・Issue #9443・microsoft/terminal (github.com)
UWP 自定义标题栏 Window.SetTitleBar (UIElement) 方法 (Windows.UI.Xaml) - Windows UWP 应用程序 | Microsoft Docs