2010-12-09 29 views
2

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"); 
+0

pouvez-vous partager un code qui appelle 'MyHitTestFilter'? – TarasB

+0

De quel BackgroundLine est dérivé? – rooks

+0

BackgroundLine et GraphicsBase sont tous deux dérivés de DrawingVisual. drawingCanvas contient uniquement des objets de ces 2 classes. –

Répondre

0

J'ai trouvé le problème. L'objet DrawingVisual que je vois est le rectangle que j'ai ajouté pour la couleur d'arrière-plan. J'ai oublié cela et j'ai pensé que j'obtenais le type de l'objet BackgroundLine en tant que DrawingVisual. Je peux obtenir le type BackgroundLine spécifique en tant que rooks. Merci.