文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Silverlight中命中测试使用小技巧

Silverlight中命中测试使用小技巧

时间:2010-08-16  来源:DevinShaw

在做Silverlight流程设计器中,两次用到了命中测试。主要用到了IsHitTestVisible和FindElementsInHostCoordinates。

IsHitTestVisible是UIElement类的属性,作用是是否对点击起作用。  FindElementsInHostCoordinates是VisualTreeHelper的方法,查找点或区域内的UIElement对象。

1. IsHitTestVisible的使用

场景:在两个环节之间画迁移时,我试用了动态画一条直线显示迁移的位置。在MouseLeftButtonDown事件中,记录迁移的起点。在MouseLeftButtonUp事件中得到迁移的终点,并动态添加一天迁移。而在MouseMove的过程中,我动态显示一条直线来显示迁移的位置。

问题:在终点环节中MouseLeftButtonUp事件能触发,时而不能触发。

该问题让我莫名其妙,百思不得其解。后来请假高手,方知道问题出在MouseMove时,动态画的直线上。MouseLeftButtonUp事件并没有在环节上触发,而是在那条直线上触发。因为鼠标变很小,有时相差一个像素就不在直线上而落在环节上,此时事件能正常触发。解决的办法只要给这条直线IsHitTestVisible属性赋值为false就可以了。


2. FindElementsInHostCoordinates

问题:最初实现迁移的选中和插点都是在迁移线的鼠标点击事件中完成的。迁移线太细了,要选中迁移很费力。

查找资料后发现Silverlight也有命中测试,我在迁移钱的父节点添加命中测试的判断,就可以解决问题。示意代码如下:

代码 Rect clickArea = new Rect(e.GetPosition(null).X - 3, e.GetPosition(null).Y - 3, 6, 6);
IEnumerable<UIElement> list = VisualTreeHelper.FindElementsInHostCoordinates(clickArea, this).Where(f => { return f is GraphicTransition; });
if(list.Count() > 0)
{
   (list.First() as GraphicTransition).MouseLeftDown(e);
    return;
}


 

 FindElementsInHostCoordinates()有两个重载方法,一个是测试点的命中,一个是测试区域的命中。 我在代码中就用测试一个点击区域,看是否选中了迁移。这样就方便多了。

相关阅读 更多 +
排行榜 更多 +
耶小兔子2

耶小兔子2

休闲益智 下载
nba2k20豪华版

nba2k20豪华版

体育竞技 下载
画线征服火柴人安卓版

画线征服火柴人安卓版

动作格斗 下载