Wpf窗口标题栏鼠标活动

Posted

技术标签:

【中文标题】Wpf窗口标题栏鼠标活动【英文标题】:Wpf window title bar mouse activity 【发布时间】:2020-01-09 13:36:33 【问题描述】:

我正在尝试在窗口标题栏上获取事件(对于标准 wpf 窗口)。

一个简单的鼠标按下事件(无论按钮如何)就足够了。 这个想法是,当用户在控件外部单击时,我想对自定义控件(包含文本框)执行操作。

现在我正在向控件添加两个事件处理程序以帮助实现这一点: UIElement.IsKeyboardFocusWithinChanged 和 Window.PreviewMouseDown。它几乎可以完美地与这两个事件一起工作,除非用户单击窗口标题栏,因为这两个事件都没有被触发......

有什么想法吗?谢谢

【问题讨论】:

【参考方案1】:

您可以使用以下代码检查是否单击了窗口边框:

private const int WM_NCLBUTTONDOWN = 0x00a1;

// added after window loaded
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));

private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)

    switch (msg)
    
        case WM_NCLBUTTONDOWN:
            // your action
            break;
    

    return IntPtr.Zero;

【讨论】:

以上是关于Wpf窗口标题栏鼠标活动的主要内容,如果未能解决你的问题,请参考以下文章

删除 WPF 窗口的标题栏文本但保留状态栏文本

wpf怎么设置程序任务栏图标和缩略图标题和图标

如何在 WPF 中获取工具窗口标题栏高度?

WPF:将文件拖放到整个窗口中(包括标题栏和窗口边框)

禁用 WPF 窗口标题栏中的关闭按钮 (C#)

winform标题栏用的是啥控件?