WEB开发网
开发学院图形图像Flash Silverlight 2.0 命中测试(HitTest) 阅读

Silverlight 2.0 命中测试(HitTest)

 2008-10-11 11:41:44 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 对于某个对象的点击事件,我们可以通过Click、MouseLeftButtonUp、MouseLeftButtonDown来捕获,Silverlight 2.0 命中测试(HitTest),但是如果有几十个、甚至几百个这样的对象需要判断是否被点击,可能你就会觉得很不爽,只要你的鼠标点击

本文示例源代码或素材下载

对于某个对象的点击事件,我们可以通过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下编译通过。

Tags:Silverlight 命中

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接