wpf window 标题栏鼠标activity
Wpf window title bar mouse activity
我正在尝试在 window 标题栏上获取事件(对于标准 wpf window)。
一个简单的鼠标按下事件(无论按钮)就足够了。
我的想法是,当用户在控件外部单击时,我想对自定义控件(包含文本框)执行操作。
现在我正在向控件添加两个事件处理程序以帮助:
UIElement.IsKeyboardFocusWithinChanged 和 Window.PreviewMouseDown。它几乎可以完美地处理这两个事件,除非用户单击 window 标题栏,因为这两个事件中的 none 被触发...
有什么想法吗?谢谢
您可以使用以下代码检查是否单击了 window 边框:
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;
}
我正在尝试在 window 标题栏上获取事件(对于标准 wpf window)。
一个简单的鼠标按下事件(无论按钮)就足够了。 我的想法是,当用户在控件外部单击时,我想对自定义控件(包含文本框)执行操作。
现在我正在向控件添加两个事件处理程序以帮助: UIElement.IsKeyboardFocusWithinChanged 和 Window.PreviewMouseDown。它几乎可以完美地处理这两个事件,除非用户单击 window 标题栏,因为这两个事件中的 none 被触发...
有什么想法吗?谢谢
您可以使用以下代码检查是否单击了 window 边框:
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;
}