首页 > 解决方案 > Wpf窗口标题栏鼠标活动

问题描述

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

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

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

有任何想法吗 ?谢谢

标签: wpfwindowmouseeventtitlebar

解决方案


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

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;
}

推荐阅读