在silverlight中执行命中测试

时间:2011-01-06 15:01:22

标签: c# .net silverlight silverlight-4.0

在Silverlight 4中是否可以找出被点击的控件? 所有UIElements都有一个名为IsHitTestVisible的属性,但我不能在控件上执行hittest吗?

2 个答案:

答案 0 :(得分:2)

您可以按照MSDN文档中的描述使用VisualTreeHelper.FindElementsInHostCoordinates进行测试:

http://msdn.microsoft.com/en-us/library/cc838402%28v=VS.95%29.aspx

但是,更简单的方法可能是在您对命中测试感兴趣的特定元素上添加处理程序到MouseLeftButtonUp事件。

答案 1 :(得分:1)

您可以通过MouseLeftButtonDownMouseLeftButtonUp事件(或等效的RightButton事件)发现鼠标点击次数。

这些是冒泡事件,这意味着如果没有处理它们但是点击了实际元素,事件将触发包含元素,依此类推到根项目。

因此,对于许多简单元素,您可以向包含元素添加处理程序,并使用OriginalSource的use MouseButtonEventArgs属性来确定实际生成消息的元素。

但是你使用“控制”这个词,有些人松散地使用这个词来表示其他人更严格地使用的UI元素来引用像ListBox这样的东西。在后一种情况下,这些控件可以处理鼠标事件,因此它们不会再冒泡。

您仍然可以使用AddHandler在包含的UIElement上获取LeftButton事件,即使是已处理的事件也是如此。这仍然会让你发现你感兴趣的实际控制问题,因为OriginalSource将成为控制的一部分,因此是控制的后代。