Стереть детей из InkCanvas - PullRequest
4 голосов
/ 17 июня 2011

У меня есть InkCanvas в окне, в котором я разрешаю пользователю рисовать стилусом, касанием или мышью. Я также разрешаю пользователю добавлять текст. Пользователь нажимает кнопку «Добавить текст», а затем нажимает, где на холсте ему нужен текст. Там появляется текстовое поле, позволяющее им печатать. При вводе или потере фокуса я создаю ContentControl и добавляю его к myInkCanvas.Children.

Я бы хотел, чтобы пользователь мог стереть созданный им текст, когда InkCanvas находится в режиме стирания (я использую EraseByPoint). Я пытался перехватить события MouseEnter и PreviewMouseMove элементов управления контентом, но ни один из них не сработал.

Есть ли событие, которое я могу запечатлеть? Есть ли лучший способ справиться с этим сценарием? Это вообще возможно?

1 Ответ

4 голосов
/ 17 июня 2011

Для этого вы можете использовать тестирование удара.
посмотрите на здесь

сначала получите 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);

затем получите HitTestResult вашей точки

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

тогда вы можете использовать hitTestResult.VisualHit для удаления этого объекта

...