解释:VisualTreeHelper 类中的 HitTest 方法的用途是确定几何图形或点坐标值是否位于给定对象(如控件或图形元素)的呈现内容内。例如,您可以使用命中测试来确定鼠标在对象边框中的单击点是否位于圆形几何图形内。您还可以选择重写对命中测试的默认实现来执行您自己的自定义命中测试计算。
Windows Presentation Foundation (WPF) 可视化层支持针对点或几何图形下的所有对象执行命中测试,而不仅仅是最顶层对象。结果以 Z 顺序返回。但是,作为 HitTest 方法的参数传递的可视化对象确定要对可视化树的哪个部分执行命中测试。您可以对整个可视化树执行命中测试,也可以对其任何部分执行命中测试。
在下图中,圆对象位于正方形对象和三角形对象之上。如果您只希望对其 Z 顺序值为最顶层的可视化对象执行命中测试,则可以设置可视化命中测试枚举,使其在第一个项之后从 HitTestResultCallback 返回 Stop 以停止命中测试遍历。
如果您希望枚举特定点或几何图形下的所有可视化对象,请从 HitTestResultCallback 返回 Continue。这意味着您可以对某一对象之下的其他可视化对象执行命中测试,即使它们完全被遮盖也是如此。有关更多信息,请参见“使用命中测试结果回调”部分中的代码示例。
通过使用 HitTest 方法指定要进行命中测试的可视化对象和点坐标值,可以确定某个点是否处于可视化对象的几何图形之内。可视化对象参数标识可视化树中命中测试搜索的起始点。如果在可视化树中找到其几何图形包含此坐标的可视化对象,则将该对象设置为 HitTestResult 对象的 VisualHit 属性。然后从 HitTest 方法返回 HitTestResult。如果要执行命中测试的可视化子树中不包含该点,则 HitTest 返回 null。
// Respond to the left mouse button down event by initiating the hit test.
private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// Retrieve the coordinate of the mouse position.
Point pt = e.GetPosition((UIElement)sender);
// Perform the hit test against a given portion of the visual object tree.
HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt);
if (result != null)
{
// Perform action on hit visual object.
}
}