2009-05-30 4 views
9

Il costruttore di RoutedCommand ha "tipo proprietario" come ultimo argomento. Qual è il suo significato? Quando viene usato?Che uso ha l'argomento ownertype del costruttore di classi di RoutedCommand?

documentazione MSDN dà completamente alcun indizio sul perché ce n'è bisogno, e se ho potuto utilizzare un tipo per tutti i comandi

Citazione da MSDN

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

C'è un'altra cosa. Che tipo dovrei usare durante la creazione di nuovi comandi indirizzati dinamicamente dalla matrice di nomi. Sembra che qualsiasi tipo funzioni, quindi sto usando UIElement, ma se c'è un tipo più adatto per questo mi piacerebbe sapere.

risposta

6

L'origine per RoutedCommand indica che il tipo diventa la proprietà OwnerType. Alla fine, questa proprietà viene interrogata mediante il seguente metodo privato quando si immette InputGestures. Sembra quindi che questo tipo venga utilizzato per cercare un set di comandi (hardcoded) basato sul tipo che ha creato 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

Chiunque può spiegare perché? –

+2

Probabilmente solo "perché". È una buona ragione per progettare API come qualsiasi altro. * blech * –

3

So che questa è una domanda molto vecchio, ma è la ricerca Top Hit per "ownertype RoutedCommand".

Memorizzazione di un proprietarioTipo e nome all'interno di ciascun oggetto RoutedCommand fornisce un suggerimento su come trovare i riferimenti ad esso nel codice. Supponiamo che tu stia eseguendo il debugger su un metodo che ha un parametro arbitrario ICommandSource. È possibile esaminare la proprietà Command e, se si vede che OwnerType è CommonCommands e Name è "DoSomething", è possibile accedere al campo DoSomething della classe CommonCommands, dove potrebbe esserci un commento utile oppure cercare riferimenti a CommonCommands.DoSomething per trovare CommandBindings associati o qualcosa. Senza queste proprietà, il RoutedCommand sarebbe solo un oggetto anonimo.

Non so se quel motivo fosse ciò che i progettisti dell'API avevano in mente quando includevano l'argomento, ma mi è stato utile almeno.

+0

Quindi non ha alcun effetto? È solo per "documentazione"? –

+0

@ScottStafford Ha uno scopo. Se si osserva il commento di denis philips, il metodo privato 'GetInputGestures' carica i gesti di input per i comandi incorporati. Suppongo che pubblicizzino ancora questo in modo tale da assegnare un tipo che il loro codice interno rifiuta. – NWoodsman

Problemi correlati