Ключевое событие Silverlight 4 на уровне контроля - PullRequest
0 голосов
/ 12 января 2012

У меня есть элемент управления Silverlight (ChildWindow), который я хочу получать все события нажатия клавиш.Проблема в том, что если я просто скажу

this.KeyDown += new KeyEventHandler(EventDetailsPopup_UC_KeyDown)

, это не сработает, потому что событие направлено на все его дочерние элементы управления.Как получить события Key или Mouse с уровня UserControl или ChildWindow?Спасибо

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Вы не описываете, что вы подразумеваете под словом «это не сработает», но я, по крайней мере, могу дать вам некоторое представление.

Silverlight поддерживает концепцию маршрутизируемых событий.Когда перенаправленное событие запускается на дочернем элементе управления, оно передается по логическому дереву, запускает родительский элемент управления, затем родительский элемент управления и т. Д. ... до тех пор, пока не будет достигнут корневой визуал.Список перенаправленных событий подробно описан на этой странице MSDN .Это называется пузырящийся .

Похоже, вы хотите, чтобы дочерний элемент управления не видел это событие?т.е. вы хотите отменить его, установив его как обработанный.К сожалению, это невозможно, потому что дочерний элемент управления всегда будет получать событие первым.Для поддержки этого вам требуется функция под названием tunneling , где событие «предварительного просмотра» сначала туннелирует от родителя к потомку, прежде чем инициируется событие пузыря.Это специфичная для WPF функция, как описано на странице MSDN, на которую ссылаются выше.

0 голосов
/ 13 января 2012

Или если «не работает» означает, что вы не получаете событие. Это может быть из-за того, что некоторый дочерний элемент установил для параметра Handled параметра eventarguments значение true.

Но вы все равно можете зарегистрироваться для прослушивания обработанных событий в коде, скажем, в конструкторе вашего дочернего окна:

this.AddHandler(KeyDownEvent, (KeyEventHandler)YourHandlerFunction, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...