Pergunta

Eu tenho um InkCanvas em uma janela em que permito ao usuário desenhar com uma caneta, toque ou mouse.Eu também permito que o usuário adicione texto.O usuário toca em um botão "adicionar texto" e, em seguida, toca onde na tela deseja inserir o texto.Uma caixa de texto aparece lá, permitindo que eles digitem.Ao entrar ou perder o foco, crio um ContentControl e o adiciono a myInkCanvas.Children.

Gostaria que o usuário pudesse apagar o texto que criou quando o InkCanvas estiver no modo de apagamento (estou usando EraseByPoint).Eu tentei capturar os eventos MouseEnter e PreviewMouseMove dos controles de conteúdo, mas nenhum parece disparar.

Existe algum evento que eu possa registrar?Existe uma maneira melhor de lidar com esse cenário?É mesmo possível?

Foi útil?

Solução

Você pode usar o teste de clique para essa finalidade
veja aqui

obtenha o InkPresenter primeiro

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

em seguida, obtenha HitTestResult do seu ponto

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

então você pode usar hitTestResult.VisualHit para remover este objeto

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top