WPF RoutedCommand / RoutedEvent是谁/什么引发了这个事件?

时间:2017-10-17 01:42:51

标签: c# wpf routed-events routed-commands

我试图了解WPF如何实现路由命令,这些命令在内部由路由事件实现。在UIElement类定义中,我们找到了这段代码:

EventManager.RegisterClassHandler(type, CommandDevice.CommandDeviceEvent, new 
    CommandDeviceEventHandler(UIElement.OnCommandDeviceThunk), false);

从那时起,UIElement.OnCommandDeviceThunk处理程序将通过它在其主体中调用的函数的参数传递所有信息,这些函数本身也会执行相同的操作,直到它到达我们订阅的CommandBinding.Executed事件为止,因此执行我们的回复代码。

我能够找到并希望了解的是,谁提出了CommandDevice.CommandDeviceEvent

例如,当我将ButtonBase子类对象的Command属性链接到ApplicationCommands命令时,它是否以某种方式引发CommandDeviceEvent以及它是如何引发的做到了吗?

我理解GlobalEventManager拥有大量的事件处理程序列表,但我还没有理解谁引发事件来触发这些处理程序?

1 个答案:

答案 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