WPF - обратный вызов фильтра проверки попадания - PullRequest
2 голосов
/ 10 декабря 2010

У меня есть холст, и у него есть дочерние DrawingVisuals в его VisualCollection.Я хочу пройти тестирование против одного типа ребенка, но не против других.Для этого я написал функцию HitTestFilterCallback:

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

Итак, я проверяю, является ли дочерний элемент холста фоновой линией, производной от 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");

1 Ответ

0 голосов
/ 10 декабря 2010

Я нашел проблему. Объект DrawingVisual, который я вижу, был прямоугольником, который я добавил для цвета фона. Я забыл об этом и подумал, что получаю тип объекта BackgroundLine как DrawingVisual. Я могу получить конкретный тип BackgroundLine, как сказали грачи. Благодарю.

...