Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF RoutedCommand/RoutedEvent引发事件的人员/原因?_C#_Wpf_Routed Events_Routed Commands - Fatal编程技术网

C# WPF RoutedCommand/RoutedEvent引发事件的人员/原因?

C# WPF RoutedCommand/RoutedEvent引发事件的人员/原因?,c#,wpf,routed-events,routed-commands,C#,Wpf,Routed Events,Routed Commands,我试图理解WPF是如何实现路由命令的,这些命令在内部是由路由事件实现的。在UIElement类定义中,我们可以找到这段代码: EventManager.RegisterClassHandler(type, CommandDevice.CommandDeviceEvent, new CommandDeviceEventHandler(UIElement.OnCommandDeviceThunk), false); 从那时起,UIElement.OnCommandDeviceThunk处

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

EventManager.RegisterClassHandler(type, CommandDevice.CommandDeviceEvent, new 
    CommandDeviceEventHandler(UIElement.OnCommandDeviceThunk), false);
从那时起,
UIElement.OnCommandDeviceThunk
处理程序将通过它在其体内调用的函数的参数传递所有信息,这些函数本身也会这样做,直到它到达我们订阅的
CommandBinding.Executed
事件,从而执行我们的响应代码

我似乎找不到并且想了解的是,谁提出了
CommandDevice.CommandDeviceEvent

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

我知道
GlobalEventManager
拥有大量事件处理程序列表,但我还不知道是谁引发事件来触发这些处理程序

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

ButtonBase
类在单击内部
CommandHelpers
类时调用该类的
ExecuteCommandSource
方法:

然后,此方法执行实际命令,即
ICommand
属性返回的对象:

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

ButtonBase
类在单击内部
CommandHelpers
类时调用该类的
ExecuteCommandSource
方法:

然后,此方法执行实际命令,即
ICommand
属性返回的对象: