2011-06-16 3 views
4

J'ai une InkCanvas sur une fenêtre dans laquelle je permets à l'utilisateur de dessiner avec un stylet, une touche ou une souris. Je permets également à l'utilisateur d'ajouter du texte. L'utilisateur appuie sur un bouton "Ajouter un texte", puis tape où sur la toile ils aimeraient leur texte. Une zone de texte apparaît là, leur permettant de taper. En entrant ou perdu le focus je crée un ContentControl et l'ajoute à myInkCanvas.Children. Je voudrais que l'utilisateur puisse effacer le texte qu'il a créé lorsque le InkCanvas est en mode effacement (J'utilise EraseByPoint). J'ai tenté de capturer les événements MouseEnter et PreviewMouseMove des contrôles de contenu, mais aucun ne semble déclencher.Effacer les enfants d'un InkCanvas

Y a-t-il un événement que je peux capturer? Y a-t-il une meilleure façon de gérer ce scénario? Est-ce même possible?

Répondre

4

Vous pouvez utiliser le test a frappé à cette fin
regard sur here

obtenir InkPresenter premier

public T GetVisualChild<T>(Visual parent) where T : Visual 
{ 
    T child = default(T); 
    int numVisuals = VisualTreeHelper.GetChildrenCount(parent); 
    for (int i = 0; i < numVisuals; i++) 
    { 
     Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); 
     child = v as T; 
     if (child == null) 
     { 
      child = GetVisualChild<T>(v); 
     } 
     if (child != null) 
      break; 
    } 
    return child; 
} 

InkPresenter inkPresenter = GetVisualChild<InkPresenter>(myInkCanvas); 

alors obtenir HitTestResult de votre point

HitTestResult hitTestResult = VisualTreeHelper.HitTest(inkPresenter, new Point(x, y)); 

vous pouvez utiliser hitTestResult.VisualHit supprimer cet objet

+0

Donc, je devrais capturer un événement de souris sur l'inkcanvas et sur chaque événement effectuer le test de coup sur chaque enfant de l'inkcanvas? –

+0

Oui dans les événements comme MouseDown –

+0

Il semble cool. Je n'arrive pas à trouver une version générique de GetVisualChild. Dans quel espace de noms est-ce? –