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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top