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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top