Cancella i figli di un InkCanvas
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?
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