当我在鼠标单击画布上使用System.Windows.Media.VisualTreeHelper.HitTest
时,它总是将元素返回到顶部。我的意思是,如果有两个元素相互重叠,我得到的就是画布中ZIndex较高的元素。
我也尝试过this way,但是即使我做了IsHitTestVisible = False
,它仍然向我返回了同样的一个。
是否有可能使元素“在下面”?
请参见“命中测试和Z顺序”一节:Hit Testing in the Visual Layer,以及代码示例:VisualTreeHelper.HitTest Method。
简而言之,您需要使用采用HitTest()
的HitTestResultCallback
方法之一,然后从回调中返回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;
}