我有一个画布,它的 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");