Как получить выбранный объект из события MouseLeftButtonUp, зарегистрированного в родительском контейнере?

У меня есть эллипсы, нарисованные поверх холста, я зарегистрировал MouseLeftButtonUp на холсте, и я хочу получить то, что эллипс был нажат, используя:

(Ellipse)e.Source

Но e.Source - это всегда холст, я также пробовал e.OriginalSource, а также делал то же самое с PreviewMouseLeftButtonUp, но все же результат. Аргументом события является MouseButtonEventArgs. Что я делаю неправильно? Также есть способ проверить, есть ли дочерний элемент холста в определенной точке.

3 ответа

Использование e.OriginalSource вместо.

Вы, вероятно, хотите PreviewMouseLeftButtonUp, а не MouseLeftButtonUp. Также вам может потребоваться зарегистрировать ваше событие, используя Ellipse.PreviewMouseLeftButtonUp, а не событие MouseUp на Canvas. Что-то вроде этого:

<Canvas ... Ellipse.PreviewMouseLeftButtonUp="MyHandler" />

И, как упоминал HB, вы хотите использовать e.OriginalSource, а не e.Source.

РЕДАКТИРОВАТЬ: неправильно прочитать вопрос, редактирование, чтобы изменить на PreviewMouse*LeftButton*Up

Я только что столкнулся с этой проблемой, и это был первый ответ, который появился. У меня это работало, но не наMouseLeftButtonUp. Это произошло из-за логической ошибки, которую я допустил при захвате мыши вMouseDownобработчик.

MouseUpсобытия срабатывают только на захваченном элементе, если вы захватываете элемент.

У меня была следующая строка в моемMouseLeftButtonDownобработчик:

      ((FrameworkElement) sender).CaptureMouse();

Изменение этого значения на следующее устранило проблему:

      ((FrameworkElement) e.OriginalSource).CaptureMouse();
Другие вопросы по тегам