在WPF中“捕获鼠标”是什么意思?

时间:2009-06-02 23:04:42

标签: wpf events mouse

System.Windows.UIElement上有一个CaptureMouse()和一个配对的ReleaseMouseCapture()方法。在这个WPF DragDrop示例中,他们在MouseDown上调用CaptureMouse并在MouseUp上释放它。 documentation in MSDN就像它一样无用 - “CaptureMouse - >捕获鼠标。”

在我尝试之前,我认为它以某种方式将鼠标锁定在UIElement界限内,但当我尝试它时显​​然不是这样。从实验开始,当鼠标在UIElement之外时似乎与响应事件有关,但不想成为cargo cult programmer我不想只使用它,因为例子,我d喜欢它的含义的权威描述。

3 个答案:

答案 0 :(得分:74)

来自MSDN上的Capture and Uncapture the Mouse

  

当一个对象捕获鼠标时,所有与鼠标相关的事件都会被视为具有鼠标捕获的对象执行该事件,即使鼠标指针位于另一个对象上也是如此。

捕获鼠标对于拖动非常有用,因为只有捕获控件才会接收鼠标事件,直到释放为止。所有拖动代码都可以存在于一个控件中,而不是分布在多个控件上。

答案 1 :(得分:11)

当捕获鼠标时,即使鼠标指针不在其边界区域内,控件也会接收鼠标事件。

通常,它用于:

  • 拖放
  • 按钮(当您将鼠标按下按钮并在释放按钮之前移动鼠标时处理鼠标向上)

答案 2 :(得分:4)

它的Silverlight 2 documentation有更详细的描述,我不知道为什么它也不是3.5文档页面的一部分:

  

当对象捕获鼠标时,无论鼠标指针是否在其边界区域内,该对象都会接收鼠标输入。通常仅在模拟拖动操作期间捕获鼠标。   
...

它与WPF的工作原理相同,因此它与DragDrop一起使用的原因就是如何 它知道报告回鼠标可能在该控件之外时被拖动的控件。如果你注释掉MyCanvas.Capture()和Capture(Null)(它会清除它),你就不能再掉线了。