MouseLeftButtonUpEvent & Bubbling в Canvas - PullRequest
       0

MouseLeftButtonUpEvent & Bubbling в Canvas

1 голос
/ 30 декабря 2010

Я думаю, что схожу с ума ...

У меня есть Canvas с обработчиками событий для MouseMove & MouseLeftButtonUp.Однако MouseLeftButtonUp не запускается, когда это происходит при наведении курсора на TextBlock, который находится внутри canvas.(он срабатывает очень хорошо, когда я отпускаю кнопку мыши в пустом пространстве холста)

Я попытался подключить обработчик через AddHandler и использовать обычный синтаксис + =, похоже, ничего не работает.Я пытался использовать Canvas.CaptureMouse (), но, похоже, он тоже не работает (CaptureMouse возвращает true btw).

MouseLeftButtonUp просто не хочет распространяться на своего родителя, когда это происходит через TextBlock (или любой другой элемент с IsHitTestVisible =правда) внутри холста.

Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Сначала я хотел бы сказать, что вы не сходите с ума.Я видел это раньше в приложениях Silverlight.Silverlight имеет несколько интересных стратегий событий.События Silverlight следуют методу «всплывающих» сообщений для перенаправленных событий, но не со всеми событиями ( msdn имеет некоторую информацию об этом ). События, которые вы слушаете, находятся в этом списке, но обрабатываются TextBlock.Большинство UIElements имеют IsHitTestVisible = true, поэтому события мыши и другие события регистрируются элементом управления и не передаются его родительскому элементу.Установка IsHitTestVisible = false должна решить проблему.Кроме этого, я могу рассказать вам, что я пытался преодолеть эту проблему при необходимости IsHitTestVisible = true.

  1. Установить обработчик событий от родителя на TextBlock.Недостатком является то, что вы должны делать это для каждого элемента управления на холсте.
  2. Попробуйте запустить событие через класс расширения.Я не мог заставить это работать, потому что я не мог запускать события, используя отражение.
0 голосов
/ 31 декабря 2010

Вы упомянули, что пробовали AddHandler - пробовали ли вы перегрузку AddHandler, которая принимает два параметра, второй из которых имеет значение "true", чтобы указать, что вы также хотите получать обработанные события?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...