RoutedCommand的构造函数将“owner type”作为最后一个参数。它的意义是什么?什么时候使用?
MSDN文档完全不知道为什么需要它以及我是否可以为所有命令使用一种类型
来自MSDN的报价
ownerType
Type: System.Type The type
which is registering the command.
还有一件事。从名称数组动态创建新的路由命令时,我应该使用什么类型。看起来任何类型都有效,所以我使用的是UIElement,但如果有更合适的类型,我想知道。
答案 0 :(得分:6)
RoutedCommand的源显示该类型成为OwnerType属性。获取InputGestures时,最终通过以下私有方法查询此属性。因此,看起来这种类型被用于根据创建RoutedCommand的类型查找(硬编码)命令集。
private InputGestureCollection GetInputGestures()
{
if (this.OwnerType == typeof(ApplicationCommands))
{
return ApplicationCommands.LoadDefaultGestureFromResource(this._commandId);
}
if (this.OwnerType == typeof(NavigationCommands))
{
return NavigationCommands.LoadDefaultGestureFromResource(this._commandId);
}
if (this.OwnerType == typeof(MediaCommands))
{
return MediaCommands.LoadDefaultGestureFromResource(this._commandId);
}
if (this.OwnerType == typeof(ComponentCommands))
{
return ComponentCommands.LoadDefaultGestureFromResource(this._commandId);
}
return new InputGestureCollection();
}
答案 1 :(得分:4)
我知道这是一个非常古老的问题,但它是“routedcommand ownertype”的热门搜索。
在每个RoutedCommand对象中存储OwnerType和Name,可以提示如何在代码中查找对它的引用。假设您正在某个具有任意ICommandSource参数的方法上运行调试器。您可以检查Command属性,如果您看到OwnerType为CommonCommands
且Name为"DoSomething"
,则可以导航到CommonCommands类的DoSomething字段,其中可能有有用的注释或搜索用于引用CommonCommands.DoSomething
以查找关联的CommandBindings或其他内容。如果没有这些属性,RoutedCommand将只是一个匿名对象。
我不知道这个原因是否是API设计者在包含论证时的实际想法,但它至少对我有用。