Я пытаюсь понять, как WPF реализует маршрутизируемые команды, которые внутри себя реализуются маршрутизируемыми событиями. В определении класса UIElement
мы находим этот фрагмент кода:
EventManager.RegisterClassHandler(type, CommandDevice.CommandDeviceEvent, new
CommandDeviceEventHandler(UIElement.OnCommandDeviceThunk), false);
С этого момента обработчик UIElement.OnCommandDeviceThunk
будет передавать всю информацию через аргументы функций, которые он вызывает в своем теле, которые сами делают то же самое, пока не достигнет события CommandBinding.Executed
, на которое мы подписываемся, тем самым выполняя наш ответный код.
Чего я не могу найти и хотел бы понять, так это того, кто поднимает CommandDevice.CommandDeviceEvent
?
Когда, например, я связываю свойство Command
объекта подкласса ButtonBase
с командой ApplicationCommands, поднимает ли оно каким-то образом CommandDeviceEvent
и как это происходит?
Я понимаю, что GlobalEventManager
содержит множество списков обработчиков событий, но я еще не понял, кто инициирует события для запуска этих обработчиков?