WPF - 命中测试过滤器回调

时间:2010-12-09 22:34:30

标签: wpf callback hittest

我有一个画布,它的VisualCollection中有子DrawingVisuals。我想对某些类型的孩子进行测试,但不是针对其他人。为此,我编写了HitTestFilterCallback函数:

public HitTestFilterBehavior MyHitTestFilter(DependencyObject o)
{
    Debug.WriteLine(o.GetType());
    if (o is BackgroundLine)
    {
        return HitTestFilterBehavior.ContinueSkipSelf;
    }
    else
    {
        return HitTestFilterBehavior.Continue;
    }
}

所以我检查canvas的子项是否是BackgroundLine,它是从DrawingVisual派生的,如果是,我跳过它。但是,我从Debug.WriteLine(o.GetType())获得的类型只是System.Windows.Media.DrawingVisual。有没有办法找到最具体的对象类型?

其余代码如下。我想仅针对GraphicsBase对象进行测试。

GraphicsBase hit = null;
public HitTestResultBehavior MyHitTestResult(HitTestResult result)
{
    hit = (GraphicsBase)result.VisualHit;

    return HitTestResultBehavior.Stop;
}

    VisualTreeHelper.HitTest(drawingCanvas, new HitTestFilterCallback(MyHitTestFilter), 
new HitTestResultCallback(MyHitTestResult), new PointHitTestParameters(point));

if (hit != null)
    Debug.WriteLine("hit");
else
    Debug.WriteLine("nothing");

1 个答案:

答案 0 :(得分:0)

我发现了问题。我看到的DrawingVisual对象是我为背景颜色添加的矩形。我忘记了这一点,并认为我将BackgroundLine对象的类型作为DrawingVisual。我可以得到特定的BackgroundLine类型,如rooks所说。谢谢。