Как узнать, какой элемент управления мыши щелкнул на холсте? - PullRequest
0 голосов
/ 10 августа 2011

Я создаю приложение C # WPF и ищу способ сделать следующее:

У меня есть холст с различными пользовательскими элементами управления и кнопкой.

Когда я нажимаю на кнопку, курсор меняется на руку (Canvas.Cursor = Cursors.Hand)

Затем, если я нажимаю на один из элементов управления, я получаю окно сообщения, в котором отображается название элемента управления, по которому щелкнули (имя является открытым свойством элемента управления).

Если я щелкаю где-то еще, курсор перезагружается, и мне нужно снова нажать кнопку, прежде чем я смогу снова получить имя.

Я пытался играть с событиями и обработчиками, но не смог достичь того, что хотел.

Большое спасибо за помощь

1 Ответ

0 голосов
/ 10 августа 2011

Вы можете использовать Canvas.MouseDown и VisualTreeHelper.HitTest() с GetPosition() аргументов события мыши, чтобы получить элемент, по которому щелкнули.

<Canvas Name="myCanvas" MouseDown="MouseDownHandler" />

public void MouseDownHandler(object sender, MouseButtonEventArgs e)
{
    HitTestResult target = VisualTreeHelper.HitTest(myCanvas, e.GetPosition(myCanvas));

    while(!(target is Control) && (target != null))
    {
        target = VisualTreeHelper.GetParent(target);
    }
    // now if target is not null, it's the control that was clicked...
}

Затем вы можете использовать VisualTreeHelper.GetParent()while loop), чтобы получить элемент управления, по которому щелкнули.

...