默认命令目标是什么?

Mim*_*imi 2 c# wpf command

关于在“ WPF控件开发”书中扮演默认命令目标角色的元素,有两种不同的想法:

Page 258»命令目标是在其上引发命令的对象。ICommandSource接口包含可以设置为特定对象的CommandTarget属性。默认情况下,命令源本身被视为命令目标。

Page 262» 默认情况下,未设置CommandTarget时,将使用具有键盘焦点的元素。

此外,在本教程中,我们可以使菜单项和按钮命令目标保持未定义状态,而只有菜单项(即不是按钮)才能真正检测命令目标。那么默认的命令目标是什么?

Mim*_*imi 5

基于更多不同的测试案例,并针对@dowhilefor和@hbarck的答案,我得出结论,每种案例都有一条特定的运行路径。

指定的CommandTarget:CommandTarget可视树的根元素开始,以查找已绑定命令的第一个(最近)元素。(它仅在此路径上寻找该元素。)结论:

  1. sender:CommandTarget绑定了命令(带有CommandBinding)的容器元素。
  2. e.source:指定为的元素CommandTarget

未指定的CommandTarget:它从已聚焦(在CommandSource范围内)的元素开始朝向可视树的根元素,以查找已绑定命令的第一个(最近)元素。在这种情况下,聚焦元素将确定为CommandTarget。结论:

  1. sender:已绑定命令(带有CommandBinding标签)的焦点元素的容器。
  2. e.Source:重点关注的元素。