私はキャンバスを持っていて、そのVisualCollectionに子DrawingVisualsがあります。あるタイプの子供に対してテストを行いたいのですが、他のタイプの子供に対しては行いません。そのために、HitTestFilterCallback関数を作成しました。
public HitTestFilterBehavior MyHitTestFilter(DependencyObject o)
{
Debug.WriteLine(o.GetType());
if (o is BackgroundLine)
{
return HitTestFilterBehavior.ContinueSkipSelf;
}
else
{
return HitTestFilterBehavior.Continue;
}
}
そこで、canvasの子がDrawingVisualから派生したBackgroundLineであるかどうかを確認し、そうである場合はスキップします。ただし、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");