Estensione del markup ComponentResourceKey

Definisce e fa riferimento alle chiavi per le risorse caricate da assembly esterni. Ciò consente a una ricerca di risorse di specificare un tipo di destinazione in un assembly, anziché un dizionario risorse esplicito in un assembly o in una classe.

Utilizzo attributi XAML (chiave di impostazione, compatta)

<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />  

Utilizzo attributi XAML (chiave di impostazione, dettagliato)

<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />  

Utilizzo attributi XAML (richiesta di risorsa, compatta)

<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />  

Utilizzo attributi XAML (richiesta di risorsa, dettagliato)

<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />  

Valori XAML

Valore Descrizione
targetTypeName Nome del tipo CLR (Public Common Language Runtime) definito nell'assembly di risorse.
targetID Chiave per la risorsa. Quando vengono cercate le risorse, targetID sarà analogo alla direttiva x:Key della risorsa.

Osservazioni

Come illustrato negli utilizzi precedenti, l'utilizzo di un'estensione di markup {ComponentResourceKey} si trova in due posizioni:

  • Definizione di una chiave all'interno di un dizionario risorse del tema, come fornito da un autore del controllo.

  • Accesso a una risorsa del tema dall'assembly, quando si esegue la ri-mplazione del controllo, ma si vogliono usare i valori delle proprietà provenienti dalle risorse fornite dai temi del controllo.

Per fare riferimento alle risorse dei componenti provenienti dai temi, è in genere consigliabile usare {DynamicResource} anziché {StaticResource}. Questo è illustrato negli utilizzi. {DynamicResource} è consigliato perché il tema stesso può essere modificato dall'utente. Se si vuole che la risorsa componente che corrisponda maggiormente alla finalità dell'autore del controllo per supportare un tema, è necessario abilitare anche il riferimento alla risorsa componente come dinamico.

TypeInTargetAssembly Identifica un tipo presente nell'assembly di destinazione in cui viene effettivamente definita la risorsa. Un ComponentResourceKey oggetto può essere definito e usato indipendentemente dal sapere esattamente dove TypeInTargetAssembly è definito , ma alla fine deve risolvere il tipo tramite assembly a cui si fa riferimento.

Un utilizzo comune per ComponentResourceKey è definire le chiavi che vengono quindi esposte come membri di una classe. Per questo utilizzo, si usa il costruttore della ComponentResourceKey classe, non l'estensione di markup. Per altre informazioni, vedere ComponentResourceKeyo la sezione "Definizione e riferimento delle chiavi per le risorse del tema" dell'argomento Cenni preliminari sulla creazione di controlli.

Sia per stabilire chiavi che per fare riferimento a risorse con chiave, la sintassi degli attributi viene comunemente usata per l'estensione di ComponentResourceKey markup.

La sintassi compatta illustrata si basa sull'utilizzo della ComponentResourceKey firma del costruttore e del parametro posizionale di un'estensione di markup. L'ordine targetTypeName in cui vengono specificati e targetID è importante. La sintassi dettagliata si basa sul ComponentResourceKey costruttore senza parametri e quindi imposta TypeInTargetAssembly e ResourceId in modo analogo a una sintassi di attributo reale su un elemento oggetto. Nella sintassi dettagliata l'ordine in cui vengono impostate le proprietà non è importante. La relazione e i meccanismi di queste due alternative (compatta e dettagliata) sono descritti in modo più dettagliato nell'argomento Estensioni di markup e XAML WPF.

Tecnicamente, il valore per targetID può essere qualsiasi oggetto, non deve essere una stringa. Tuttavia, l'utilizzo più comune in WPF consiste nell'allineare il targetID valore ai moduli che sono stringhe e in cui tali stringhe sono valide nella grammatica XamlName.

ComponentResourceKey può essere usato nella sintassi degli elementi oggetto. In questo caso, è necessario specificare il valore delle TypeInTargetAssembly proprietà e ResourceId per inizializzare correttamente l'estensione.

Nell'implementazione del lettore XAML WPF la gestione per questa estensione di markup è definita dalla ComponentResourceKey classe .

ComponentResourceKey è un'estensione di markup. Le estensioni di markup in genere vengono implementate quando per i valori dell'attributo devono essere utilizzati caratteri escape in modo che non vengano considerati come valori letterali o nomi di gestori e il requisito è più globale del semplice utilizzo di convertitori dei tipi su alcuni tipi o proprietà. Tutte le estensioni di markup in XAML usano i caratteri { e } nella sintassi degli attributi, ovvero la convenzione in base alla quale un processore XAML riconosce che un'estensione di markup deve elaborare l'attributo. Per altre informazioni, vedere Estensioni di markup e XAML WPF.

Vedi anche