Как получить выбранный объект из события MouseLeftButtonUp, зарегистрированного в родительском контейнере?
У меня есть эллипсы, нарисованные поверх холста, я зарегистрировал MouseLeftButtonUp на холсте, и я хочу получить то, что эллипс был нажат, используя:
(Ellipse)e.Source
Но e.Source - это всегда холст, я также пробовал e.OriginalSource, а также делал то же самое с PreviewMouseLeftButtonUp, но все же результат. Аргументом события является MouseButtonEventArgs. Что я делаю неправильно? Также есть способ проверить, есть ли дочерний элемент холста в определенной точке.
3 ответа
Вы, вероятно, хотите 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();