Domanda

Ho un InkCanvas su una finestra in cui consento all'utente di disegnare con uno stilo, un tocco o un mouse.Consento inoltre all'utente di aggiungere testo.L'utente tocca un pulsante "aggiungi testo", quindi tocca il punto dell'area di disegno in cui desidera il testo.Viene visualizzata una casella di testo che consente loro di digitare.All'entrata o alla perdita del focus creo un ContentControl e lo aggiungo a myInkCanvas.Children.

Vorrei che l'utente fosse in grado di cancellare il testo che ha creato quando il InkCanvas è in modalità di cancellazione (sto usando EraseByPoint).Ho tentato di acquisire gli eventi MouseEnter e PreviewMouseMove dei controlli del contenuto, ma nessuno dei due sembra attivarsi.

C'è un evento che posso catturare?C'è un modo migliore per gestire questo scenario?È anche possibile?

È stato utile?

Soluzione

Puoi utilizzare l'hit testing a questo scopo
guarda qui

ottieni prima 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);

quindi ottieni HitTestResult del tuo punto

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

quindi puoi utilizzare hitTestResult.VisualHit per rimuovere questo oggetto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top