11

RoutedCommandのコンストラクターには、最後の引数として「所有者タイプ」があります。その意義は何ですか?いつ使用しますか?

MSDNのドキュメントには、なぜそれが必要なのか、すべてのコマンドに1つのタイプを使用できるかどうかについての手がかりはまったくありません。

MSDNからの引用

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

もう1つあります。名前の配列から動的に新しいルーティングコマンドを作成する場合、どのタイプを使用する必要がありますか。どのタイプでも機能するように見えるので、UIElementを使用していますが、これにより適したタイプがあるかどうかを知りたいと思います。

4

2 に答える 2

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();
}
于 2009-05-30T19:15:46.843 に答える
4

これは非常に古い質問であることは承知していますが、「routedcommand ownertype」の検索ヒットのトップです。

各 RoutedCommand オブジェクト内に OwnerType と Name を格納すると、コード内でそれへの参照を見つける方法のヒントが得られます。任意のICommandSourceパラメーターを持つメソッドでデバッガーを実行しているとします。Command プロパティを調べることができます。OwnerType がCommonCommandsで、Name が"DoSomething"であることがわかった場合は、CommonCommands クラスの DoSomething フィールドに移動できます。ここには、有用なコメントがある可能性がありCommonCommands.DoSomethingます。関連する CommandBindings などを見つけるための参照を検索することもできます。これらのプロパティがなければ、RoutedCommand は単なる匿名オブジェクトになります。

その理由が、API 設計者が引数を含めたときに実際に念頭に置いていたものかどうかはわかりませんが、少なくとも私にとっては役に立ちました。

于 2013-07-17T16:54:50.290 に答える