Ich habe eine Leinwand und es hat Kind DrawingVisuals in seiner VisualCollection. Ich will einen Test gegen eine Art von Kind, aber nicht für andere. Zu tun, dass ich HitTestFilterCallback Funktion schrieb:WPF - Hit Test Filter Callback
public HitTestFilterBehavior MyHitTestFilter(DependencyObject o)
{
Debug.WriteLine(o.GetType());
if (o is BackgroundLine)
{
return HitTestFilterBehavior.ContinueSkipSelf;
}
else
{
return HitTestFilterBehavior.Continue;
}
}
So überprüfe ich, ob das Kind von Leinwand ein BackgroundLine ist, die von DrawingVisual abgeleitet ist, und wenn es ich es überspringen. Der Typ, den ich von Debug.WriteLine (o.GetType()) bekomme, ist jedoch nur System.Windows.Media.DrawingVisual. Gibt es eine Möglichkeit, den spezifischsten Objekttyp zu finden?
Der Rest des Codes ist unten. Ich möchte nur gegen GraphicsBase-Objekte testen.
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");
können Sie einen Code teilen, der 'MyHitTestFilter' aufruft? – TarasB
Wovon stammt BackgroundLine? – rooks
Sowohl BackgroundLine als auch GraphicsBase werden von DrawingVisual abgeleitet. drawingCanvas enthält nur Objekte dieser 2 Klassen. –