Condividi tramite


ComponentResourceKey Markup Extension

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

Utilizzo attributi XAML (chiave di impostazione, compatta)

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

L'utilizzo degli attributi XAML (chiave delle impostazioni, dettagliato)

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

Utilizzo degli 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} è disponibile 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. È consigliato {DynamicResource} perché il tema stesso può essere modificato dall'utente. Se desideri che la risorsa del componente si avvicini maggiormente alla finalità dell'autore del controllo per sostenere un tema, è necessario abilitare anche il riferimento alla risorsa del componente affinché sia dinamico.

Il TypeInTargetAssembly identifica un tipo esistente nell'assembly di destinazione in cui viene effettivamente definita la risorsa. Un ComponentResourceKey può essere definito e utilizzato senza sapere esattamente dove sia definito il TypeInTargetAssembly, ma alla fine è necessario risolvere il tipo attraverso gli assembly di riferimento.

Un utilizzo comune per ComponentResourceKey consiste nel definire le chiavi che vengono quindi esposte come membri di una classe. Per questo utilizzo si usa il costruttore della classe ComponentResourceKey, 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 markup ComponentResourceKey.

La sintassi compatta illustrata si basa sull'utilizzo della firma del costruttore ComponentResourceKey e del parametro posizionale di un'estensione di markup. L'ordine in cui vengono forniti i targetTypeName e i targetID è importante. La sintassi dettagliata si basa sul costruttore senza parametri ComponentResourceKey e quindi imposta il 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 più approfonditamente nell'argomento Estensioni di markup e XAML di 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 valore targetID ai moduli che sono stringhe e in cui tali stringhe sono valide nel XamlName Grammar.

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

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

ComponentResourceKey è un'estensione di markup. Le estensioni di markup vengono in genere implementate quando è necessario che i valori degli attributi di escape siano diversi dai valori letterali o dai nomi dei gestori e il requisito è più globale rispetto all'inserimento di convertitori di tipi su determinati 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 ulteriori informazioni, vedere le estensioni di markup e WPF XAML.

Vedere anche