J'ai une toile et il a DrawingVisuals enfant dans sa collection VisualCollection. Je veux frapper le test contre un certain type d'enfant mais pas pour d'autres. Pour ce faire, j'ai écrit fonction HitTestFilterCallback:WPF - Filtre de test de hit Rappel
public HitTestFilterBehavior MyHitTestFilter(DependencyObject o)
{
Debug.WriteLine(o.GetType());
if (o is BackgroundLine)
{
return HitTestFilterBehavior.ContinueSkipSelf;
}
else
{
return HitTestFilterBehavior.Continue;
}
}
Je vérifier si l'enfant de la toile est un BackgroundLine, qui est dérivé de DrawingVisual, et si elle est je sauter. Cependant, le type que j'obtiens de Debug.WriteLine (o.GetType()) est seulement System.Windows.Media.DrawingVisual. Est-il possible de trouver le type d'objet le plus spécifique?
Le reste du code est ci-dessous. Je veux tester uniquement les objets 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");
pouvez-vous partager un code qui appelle 'MyHitTestFilter'? – TarasB
De quel BackgroundLine est dérivé? – rooks
BackgroundLine et GraphicsBase sont tous deux dérivés de DrawingVisual. drawingCanvas contient uniquement des objets de ces 2 classes. –