【发布时间】:2014-03-31 18:18:37
【问题描述】:
当我在鼠标点击画布上使用System.Windows.Media.VisualTreeHelper.HitTest 时,它总是返回顶部的元素。我的意思是,如果有两个元素相互重叠,我得到的是画布中 ZIndex 较高的那个。
我也尝试过this way,但即使在我创建了IsHitTestVisible = False 之后,它仍然返回给我同样的一个。
有没有可能得到“下面”的元素?
【问题讨论】:
当我在鼠标点击画布上使用System.Windows.Media.VisualTreeHelper.HitTest 时,它总是返回顶部的元素。我的意思是,如果有两个元素相互重叠,我得到的是画布中 ZIndex 较高的那个。
我也尝试过this way,但即使在我创建了IsHitTestVisible = False 之后,它仍然返回给我同样的一个。
有没有可能得到“下面”的元素?
【问题讨论】:
请参阅此处的“命中测试和 Z-Order”部分:Hit Testing in the Visual Layer,以及此处的代码示例:VisualTreeHelper.HitTest Method。
简而言之,您需要使用采用HitTestResultCallback 的HitTest() 方法之一,然后从您的回调中返回HitTestResultBehavior.Continue,直到找到您要查找的元素:
Point pt = ...
VisualTreeHelper.HitTest(myCanvas, null,
new HitTestResultCallback(MyHitTestResult),
new PointHitTestParameters(pt));
...
private HitTestResultBehavior MyHitTestResult(HitTestResult result)
{
DoSomethingWith(result.VisualHit);
//Set the behavior to return visuals at all z-order levels.
return HitTestResultBehavior.Continue;
}
【讨论】: