这似乎与抓老鼠有关!?
拖动过程中的正常事件顺序如下…
-
这个
PreviewMouseLeftButtonDown
处理程序被调用并
ListBox.IsMouseCaptureWithin
是
错误的。
-
这个
PreviewMouseMove
处理程序
调用。到这个时候
列表框.ismousecapturewithin
是真的。
-
期间
预览鼠标移动
处理程序
DragDrop.DoDragDrop
调用和
在这期间的某个时候,老鼠
捕获从列表框中释放。
但是,当上下文菜单打开时,一个拖拽开始的过程似乎是…
-
这个
预览鼠标松开按钮向下
处理程序被调用并
列表框.ismousecapturewithin
是
错误的。
-
这个
预览鼠标移动
处理程序获取
打电话。但是这次
列表框.ismousecapturewithin
是
仍然是错误的。
-
结束后的某个时候
预览鼠标移动
处理程序
然后列表框获取鼠标捕获
(
列表框.ismousecapturewithin
变为真)
这样做的结果是,在拖动之后,列表框仍然具有鼠标捕获功能,因此任何单击按钮以打开上下文菜单的操作实际上都将指向列表框,而不是按钮。
将以下代码添加到
预览鼠标松开按钮向下
处理程序似乎有助于吞下关闭上下文菜单的单击,而不是尝试从中开始拖动…
if (!contextMenuCloseComplete)
{
sourceElement.CaptureMouse();
return;
}
……
contextMenuCloseComplete
bool在上下文菜单的处理程序中设置
Closed
和
Opened
事件。
这有道理吗?有人知道这种老鼠捕捉行为是从哪里来的吗?