Effacer les enfants d'un Inkcanvas
Question
j'ai un InkCanvas
sur une fenêtre dans laquelle je permets à l'utilisateur dessiner avec un stylet, un toucher ou une souris. J'autorise également l'utilisateur à ajouter du texte. L'utilisateur exploite un bouton "Ajouter du texte", puis tape où sur la toile, il souhaite son texte. Une zone de texte apparaît là-bas, leur permettant de taper. Sur Entrée ou Lost Focus, je crée un ContentControl
et l'ajouter à myInkCanvas.Children
.
J'aimerais que l'utilisateur puisse effacer le texte qu'il a créé lorsque InkCanvas
est en mode effacement (j'utilise EraseByPoint
). J'ai tenté de capturer le MouseEnter
et PreviewMouseMove
Les événements du contenu contrôlent, mais ni l'un ni l'autre ne semblent tirer.
Y a-t-il un événement que je peux capturer? Existe-t-il une meilleure façon de gérer ce scénario? Est-ce même possible?
La solution
Vous pouvez utiliser des tests de coup à cet effet
Regarder ici
Obtenez d'abord Inkpresenter
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);
puis obtenez un détroit de votre point
HitTestResult hitTestResult = VisualTreeHelper.HitTest(inkPresenter, new Point(x, y));
alors vous pouvez utiliser hitTestResult.VisualHit
Pour supprimer cet objet