2010-12-09 68 views
2

我有一个画布,它的VisualCollection中有子DrawingVisuals。我想对某些类型的孩子进行测试,但不是针对其他人。要做到这一点,我写HitTestFilterCallback功能:WPF - 命中测试过滤器回调

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

所以我检查画布的孩子是否是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"); 
+0

你能分享一个调用`MyHitTestFilter`的代码吗? – TarasB 2010-12-09 23:06:03

回答

0

我发现了这个问题。我看到的DrawingVisual对象是我为背景色添加的矩形。我忘了这一点,并认为我得到了BackgroundLine对象的类型为DrawingVisual。我可以得到具体的BackgroundLine类型,就像车子说的那样。谢谢。