Apagar filhos de um InkCanvas
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?
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