Zeke Xiao

Zeke Xiao

github

Windows 11 Snap Layouts WPF 支持進展

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

  1. Should WPF add the new theme for Windows11 style? · Issue #4749 · dotnet/wpf (github.com)

  2. Add support for Windows 11 "Snap Layout" to the custom title bar (WindowChrome) · Issue #4825 · dotnet/wpf (github.com)

  3. MahApps Windows 11 integration · Issue #4140 · MahApps/MahApps.Metro (github.com)

  4. 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 原生就可以。

Electron feat: enable windows control overlay on Windows by mlaurencin · Pull Request #29600 · electron/electron (github.com)

VSCode VS Code's maximize button doesn't trigger Snap Layouts in Windows 11 · Issue #127449 · microsoft/vscode (github.com)

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。