none
Silverlight 2.0 命中测试(HitTest) RRS feed

  • 常规讨论

  • 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下编译通过。

    下载地址为http://files.cnblogs.com/tonyqus/Silverlight2HitTest.rar


    My blog: http://blog.csdn.net/dotfun http://dotfun.cnblogs.com

    My contact: QQ:372900288 E-mail:372900288@qq.com msn:sellnet007@hotmail.com

    2009年3月9日 8:09
    版主