2010-12-09 73 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類型,就像車子說的那樣。謝謝。