我试图了解WPF如何实现路由命令,这些命令在内部由路由事件实现。在UIElement
类定义中,我们找到了这段代码:
EventManager.RegisterClassHandler(type, CommandDevice.CommandDeviceEvent, new
CommandDeviceEventHandler(UIElement.OnCommandDeviceThunk), false);
从那时起,UIElement.OnCommandDeviceThunk
处理程序将通过它在其主体中调用的函数的参数传递所有信息,这些函数本身也会执行相同的操作,直到它到达我们订阅的CommandBinding.Executed
事件为止,因此执行我们的回复代码。
我能够找到并希望了解的是,谁提出了CommandDevice.CommandDeviceEvent
?
例如,当我将ButtonBase
子类对象的Command
属性链接到ApplicationCommands命令时,它是否以某种方式引发CommandDeviceEvent
以及它是如何引发的做到了吗?
我理解GlobalEventManager
拥有大量的事件处理程序列表,但我还没有理解谁引发事件来触发这些处理程序?
答案 0 :(得分:2)
例如,当我将
ButtonBase
子类对象的Command
属性链接到ApplicationCommands命令时,它是否以某种方式引发CommandDeviceEvent
以及它是如何做到的? / p>
ButtonBase
类在点击内部ExecuteCommandSource
类时会调用CommandHelpers
类:https://referencesource.microsoft.com/#PresentationFramework/Framework/System/Windows/Controls/Primitives/ButtonBase.cs,c0949dd81fca07f3,references
然后,此方法执行实际命令,即ICommand
属性返回的对象:https://referencesource.microsoft.com/#PresentationFramework/Framework/MS/Internal/Commands/CommandHelpers.cs,518e4547841e704d