在System.Windows.UIElement
上有一个CaptureMouse()
和一个配对的ReleaseMouseCapture()
方法。在这个WPF DragDrop示例中,他们在MouseDown上调用CaptureMouse并在MouseUp上释放它。 documentation in MSDN就像它一样无用 - “CaptureMouse - >捕获鼠标。”
在我尝试之前,我认为它以某种方式将鼠标锁定在UIElement界限内,但当我尝试它时显然不是这样。从实验开始,当鼠标在UIElement之外时似乎与响应事件有关,但不想成为cargo cult programmer我不想只使用它,因为例子,我d喜欢它的含义的权威描述。
答案 0 :(得分:74)
来自MSDN上的Capture and Uncapture the Mouse:
当一个对象捕获鼠标时,所有与鼠标相关的事件都会被视为具有鼠标捕获的对象执行该事件,即使鼠标指针位于另一个对象上也是如此。
捕获鼠标对于拖动非常有用,因为只有捕获控件才会接收鼠标事件,直到释放为止。所有拖动代码都可以存在于一个控件中,而不是分布在多个控件上。
答案 1 :(得分:11)
当捕获鼠标时,即使鼠标指针不在其边界区域内,控件也会接收鼠标事件。
通常,它用于:
答案 2 :(得分:4)
它的Silverlight 2 documentation有更详细的描述,我不知道为什么它也不是3.5文档页面的一部分:
当对象捕获鼠标时,无论鼠标指针是否在其边界区域内,该对象都会接收鼠标输入。通常仅在模拟拖动操作期间捕获鼠标。
...
它与WPF的工作原理相同,因此它与DragDrop一起使用的原因就是如何 它知道报告回鼠标可能在该控件之外时被拖动的控件。如果你注释掉MyCanvas.Capture()和Capture(Null)(它会清除它),你就不能再掉线了。