我在尝试通过HitTestResultCallback访问UserControl时遇到了一些麻烦,我可以在我的UserControl中找到所有控件,但我想要做的是访问UserControl类,这是我的代码:
public void DragStartInteraction()
{
VisualTreeHelper.HitTest(Application.Current.MainWindow, null, new HitTestResultCallback(myCallbackDragStartEvent), new PointHitTestParameters(_currentPoint));
...
}
private HitTestResultBehavior myCallbackDragStartEvent(HitTestResult result)
{
...
UserControl el = result.VisualHit as UserControl;
...
return HitTestResultBehavior.Continue;
}
谢谢!
答案 0 :(得分:2)
HitTestResultCallback
仅针对实际具有渲染内容的可视树中的视觉效果进行调用。例如,在Label控件中,回调将仅返回构成Label的Border和TextBlock,而不返回Label控件本身。您的UserControl也是如此。
您可以通过调用VisualTreeHelper.GetParent
从传递给HitTestResultCallback的视觉效果中获取UserControl。
或者,您还提供HitTestFilterCallback
。此回调获取可视树中的所有可视化,并且您可以在传入UserControl时停止遍历树。
VisualTreeHelper.HitTest(
Application.Current.MainWindow,
obj =>
{
if (obj is UserControl)
{
// found it
return HitTestFilterBehavior.Stop;
}
return HitTestFilterBehavior.Continue;
},
result => HitTestResultBehavior.Continue,
new PointHitTestParameters(_currentPoint));
如果您希望获得多个匹配的UserControl,可能是因为它们在您正在测试的点重叠,或者您正在使用命中测试几何进行测试,您可以通过返回HitTestFilterBehavior.ContinueSkipChildren
来继续过滤。 / p>