首页 / 软件开发 / Silverlight / Silverlight 2.0 命中测试(HitTest)
Silverlight 2.0 命中测试(HitTest)2011-09-17tonyqus.cn对于某个对象的点击事件,我们可以通过Click、MouseLeftButtonUp、MouseLeftButtonDown来捕获, 但是如果有几十个、甚至几百个这样的对象需要判断是否被点击,可能你就会觉得很不爽,因为你要添加 同样数量的Button_Click或者MouseDown、MouseUp事件处理程序,更不用说有控件重叠的情况了(两个控 件甚至有可能重合)。Silverlight 2.0在这方面做了改进,引入了WPF的HitTest方法。使用起来还是比较简单的。例如,我 们有一个Canvas叫做LayoutRoot(Canvas根元素),那么我们就可以使用下面的代码:IEnumerable<UIElement> elements=LayoutRoot.HitTest(mousePt);foreach(UIElement element in elements){FrameworkElement fe=element as FrameworkElement;...}这里的mousePt为鼠标的当前坐标,我想明眼人已经看出来了,这段代码是写在MouseDown或者MouseUp 事件处理程序中的,你可以把它直接写在Root Canvas的MouseDown或MouseUp事件中,这样可以保证能够 捕获并判断所有的鼠标点击事件,当然如果有其他需求,可以单独写在某个特定的容器元素的MouseDown 或MouseUp中。为了方便大家更好的理解HitTest,我写了一个小的sample,只要你的鼠标点击位置处存在Rectangle ,下面的TextBlock就会把相应的Rectangle的Name显示出来。该代码在VS2008和Expression Blend 2.5 march preview下编译通过。