在Silverlight中,如何通过坐标确定当前鼠标下方的对象?

时间:2009-01-15 01:27:36

标签: silverlight

我将object1作为Canvas的孩子。 object1有一个MouseLeftButtonDown事件处理程序,用于捕获对象。

object1.CaptureMouse();  

在按住鼠标左键的同时,我将鼠标移到object2上。在代码中,我如何确定鼠标是否实际上在object2上(或确定它当前所在的任何对象)?

尽我所知,我不能对object2使用鼠标事件处理程序,因为对object1的object1的CaptureMouse()方法的调用会禁用其他鼠标事件,直到我调用object1的ReleaseMouseCapture()方法。

3 个答案:

答案 0 :(得分:1)

您需要使用 System.Windows.VisualTreeHelper

VisualTreeHelper.FindElementsInHostCoordinates 将“检索位于对象坐标空间指定点内的一组对象。”

该函数有两个重载,一个采用Point,另一个采用Rect。

答案 1 :(得分:0)

你说得对,'CaptureMouse()'调用会阻止其他鼠标事件的发生。

如果然后挂钩到object1的MouseMove事件,则可以使用传递给该事件处理程序的事件参数来确定鼠标当前的位置,从而确定它相对于您关注的其他对象坐标的位置用。

这篇文章并不完全涵盖您想要的内容,但有一些内容可能对您有所帮助,以确定您要执行的操作:

http://jesseliberty.com/2009/01/13/drag-and-drop-with-managed-code/

答案 2 :(得分:0)

那篇文章有点帮助,所以谢谢你。但是,就是这样:

“您可以使用传递给该事件处理程序的事件参数来确定鼠标当前所在的位置,从而确定它与您关注的其他对象坐标的相对位置。”

......我正在努力确定。

我可以获得鼠标的当前位置。我不知道该怎么做是获取新对象(object2)的坐标,然后确定当前鼠标位置是否在'object2'内。

在Shape的情况下,通过查看Shape的剪辑几何图形可能会有一个解决方案,但在我的情况下,object2是一个Canvas,因此不太适用。