Borrar hijos de un InkCanvas
Pregunta
Yo tengo un InkCanvas
en una ventana en la que permito al usuario dibujar con un lápiz, un toque o un mouse.También permito al usuario agregar texto.El usuario toca el botón "agregar texto" y luego toca en qué parte del lienzo desea incluir el texto.Allí aparece un cuadro de texto que les permite escribir.Al entrar o perder el foco, creo un ContentControl
y agregarlo a myInkCanvas.Children
.
Me gustaría que el usuario pudiera borrar el texto que ha creado cuando el InkCanvas
está en modo de borrado (estoy usando EraseByPoint
).He intentado capturar el MouseEnter
y PreviewMouseMove
eventos de los controles de contenido, pero ninguno parece activarse.
¿Hay algún evento que pueda capturar?¿Existe una mejor manera de manejar este escenario?¿Es siquiera posible?
Solución
Puede utilizar pruebas de impacto para este propósito.
mira a aquí
obtenga InkPresenter primero
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);
luego obtenga HitTestResult de su punto
HitTestResult hitTestResult = VisualTreeHelper.HitTest(inkPresenter, new Point(x, y));
entonces puedes usar hitTestResult.VisualHit
para eliminar este objeto