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
Wpf RoutedCommand'有什么用;类构造函数所有者类型参数?_Wpf_Routed Commands - Fatal编程技术网

Wpf RoutedCommand'有什么用;类构造函数所有者类型参数?

Wpf RoutedCommand'有什么用;类构造函数所有者类型参数?,wpf,routed-commands,Wpf,Routed Commands,RoutedCommand的构造函数将“所有者类型”作为最后一个参数。它的意义是什么?何时使用 MSDN文档对为什么需要它以及是否可以对所有命令使用一种类型完全没有任何线索 引用自MSDN ownerType Type: System.Type The type which is registering the command. 还有一件事。当从名称数组动态创建新的路由命令时,应使用什么类型。看起来任何类型都可以工作,所以我使用UIElement,但是如果有更适合的类型,我

RoutedCommand的构造函数将“所有者类型”作为最后一个参数。它的意义是什么?何时使用

MSDN文档对为什么需要它以及是否可以对所有命令使用一种类型完全没有任何线索

引用自MSDN

ownerType
     Type: System.Type The type
     which is registering the command.

还有一件事。当从名称数组动态创建新的路由命令时,应使用什么类型。看起来任何类型都可以工作,所以我使用UIElement,但是如果有更适合的类型,我想知道。

RoutedCommand的源代码显示该类型成为OwnerType属性。在获取InputSignities时,此属性最终由以下私有方法查询。因此,该类型似乎用于根据创建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();
}

我知道这是一个非常古老的问题,但它是“routedcommand ownertype”的热门搜索

在每个RoutedCommand对象中存储OwnerType和名称会提示您如何在代码中查找对它的引用。假设您正在某个具有任意参数的方法上运行调试器。您可以检查Command属性,如果您看到OwnerType为
CommonCommands
,名称为
“DoSomething”
,则可以导航到CommonCommands类的DoSomething字段,其中可能有有用的注释,或者搜索对
CommonCommands.DoSomething
的引用以查找相关的commandbinding或其他内容。如果没有这些属性,RoutedCommand将只是一个匿名对象


我不知道这个原因是否是API设计人员在考虑这个论点时真正想到的,但至少对我来说是有用的。

可能只是“因为”。这是API设计的一个很好的理由。哎哟,它一点效果都没有?这只是为了“记录”?@ScottStafford这是有目的的。如果您查看denis philips的评论,则
GetInputSignities
private方法会加载内置命令的输入手势。我假设他们仍然公开这一点,以便您分配一个其内部代码拒绝的类型。