【问题标题】:HitTest Result Callback doesn't get called未调用 HitTest 结果回调
【发布时间】:2012-01-07 21:24:43
【问题描述】:

您好,我有以下代码,过滤器回调被调用但结果回调没有,我已经研究了一段时间,任何帮助将不胜感激。

   public HitTestFilterBehavior MyHitTestFilter(DependencyObject o)
   {
        s += o.ToString() + " ";
        //Test for the object value you want to filter.
        if (o.GetType() != typeof(Node))
        {
            // Visual object and descendants are NOT part of hit test results enumeration.
            return HitTestFilterBehavior.ContinueSkipSelf;
        }
        else
        {
            s+="node detected ";
            // Visual object is part of hit test results enumeration.
            return HitTestFilterBehavior.Continue;
        }
    }

结果回调的代码如下:

public HitTestResultBehavior MyHitTestResult(HitTestResult result)
{
       s += "in result callback ";
       if (result.VisualHit.GetType() == typeof(Node))
        {
            hitResultsList.Add(result.VisualHit as Node);
            s+= "node detected in result callback "
            return HitTestResultBehavior.Stop;

        }
        return HitTestResultBehavior.Continue;
 }

这是我如何调用命中测试:

 hitResultsList.Clear();
        VisualTreeHelper.HitTest(designerCanvas, new HitTestFilterCallback(MyHitTestFilter), new HitTestResultCallback(MyHitTestResult), new PointHitTestParameters(End));

现在,过滤器回调正在遍历所有元素并找到节点,但是根本没有调用结果回调。

【问题讨论】:

    标签: .net wpf tree hittest


    【解决方案1】:

    关于“可视层中的命中测试”的 MSDN 文档包含奇怪的注释“在未调用命中测试结果回调的情况下,有时会调用命中测试过滤器回调。”无需进一步解释原因:http://msdn.microsoft.com/en-us/library/ms752097.aspx#using_a_hit_test_filter_callback

    这是因为 afaik 为整个视觉树(designerCanvas)调用过滤器回调,而结果回调只为那些真正被相关 PointHitTestParameters 命中的视觉调用。

    如果你真的只想找到第一个节点(当你找到它时返回 HitTestResultBehavior.Stop),你不需要过滤。

    尝试省略过滤器回调以查看 Node 是否真的被命中。打电话

    VisualTreeHelper.HitTest(designerCanvas, null, MyHitTestResult, new PointHitTestParameters(End));
    

    【讨论】:

    • 感谢您的回复,我认为您的解释对于测试整个视觉树而不是被测试击中的视觉是有意义的,因为过滤器会遍历整个树,而没有过滤器,结果回调只返回返回两个视觉效果。顺便说一下结果回调没有捕捉到节点,所以我选择了过滤器回调。
    猜你喜欢
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多