2009-05-30 51 views
9

RoutedCommand的構造函數具有「所有者類型」作爲最後一個參數。它的意義是什麼?何時使用?RoutedCommand的類構造函數ownertype參數有什麼用?

MSDN文檔完全沒有給出關於爲什麼它需要的線索,我是否可以使用一種對所有從MSDN

命令

報價

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

還有一兩件事。從名稱數組中動態創建新的路由命令時應使用哪種類型。它看起來像任何類型的作品,所以我使用UIElement,但如果有一個更適合這種類型,我想知道。

回答

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(); 
} 
+0

有人可以解釋爲什麼? – 2009-05-30 19:21:39

+2

也許只是「因爲」。這是API設計的理由。 * blech * – 2009-06-08 14:00:32

3

我知道這是一個很古老的問題,但它是頂級的搜索命中「的RoutedCommand ownertype」。

在每個RoutedCommand對象中存儲OwnerType和Name會爲您提供如何在代碼中找到對它的引用的提示。假設您正在使用某個具有任意ICommandSource參數的方法運行調試器。您可以檢查Command屬性,並且如果您看到OwnerType爲CommonCommands,並且Name爲"DoSomething",那麼可以導航到CommonCommands類的DoSomething字段,在該字段中可能會提供有用的註釋,或者搜索對CommonCommands.DoSomething的引用以查找關聯的CommandBindings或者其他的東西。沒有這些屬性,RoutedCommand將只是一個匿名對象。

我不知道這個原因是API設計者在包含參數時實際想到的,但它對我至少有用。

相關問題