2

私はキャンバスを持っていて、その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");
4

1 に答える 1

0

問題を見つけました。私が見ているDrawingVisualオブジェクトは、背景色として追加した長方形でした。それを忘れて、BackgroundLineオブジェクトのタイプをDrawingVisualとして取得していると思いました。ルークが言ったように、特定のBackgroundLineタイプを取得できます。ありがとう。

于 2010-12-10T19:15:05.560 に答える