Delen via


ComponentResourceKey Markup-extensie

Definieert en verwijst naar sleutels voor resources die worden geladen vanuit externe assembly's. Hierdoor kan een resourcezoekactie een doeltype in een assembly opgeven in plaats van een expliciete resourcewoordenlijst in een assembly of in een klasse.

Gebruik van XAML-attributen (sleutelinstelling, compact)

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

XAML-kenmerkgebruik (instellingssleutel, gedetailleerd)

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

XAML-attribuutgebruik (hulpmiddel aanvragen, compact)

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

XAML-kenmerkgebruik (resource aanvragen, uitgebreid)

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

XAML-waarden

Waarde Beschrijving
targetTypeName De naam van het CLR-type (Public Common Language Runtime) dat is gedefinieerd in de resourceassembly.
targetID De sleutel voor de bron. Wanneer resources worden opgezocht, zal vergelijkbaar zijn met de x:Key Directive van resource .

Opmerkingen

Zoals u in de bovenstaande gebruiksvoorbeelden kunt zien, vindt u op twee plaatsen het gebruik van de markeringsuitbreiding {ComponentResourceKey}:

  • De definitie van een sleutel in een themaresourcewoordenlijst, zoals opgegeven door een ontwerper van het besturingselement.

  • Toegang tot een themaresource vanuit de assembly wanneer u het besturingselement opnieuw wilt weergeven, maar eigenschapswaarden wilt gebruiken die afkomstig zijn van resources die worden geleverd door de thema's van het besturingselement.

Voor het verwijzen naar onderdeelbronnen die afkomstig zijn van thema's, wordt het over het algemeen aanbevolen dat u {DynamicResource} gebruikt in plaats van {StaticResource}. Dit wordt weergegeven in de gebruiksgegevens. {DynamicResource} wordt aanbevolen omdat het thema zelf kan worden gewijzigd door de gebruiker. Als u wilt dat de onderdeelresource die het meest overeenkomt met de intentie van de auteur van het besturingselement voor het ondersteunen van een thema, moet u de verwijzing naar de onderdeelresource ook dynamisch laten zijn.

De TypeInTargetAssembly identificeert een type dat bestaat in de doelassembly waarin de resource daadwerkelijk is gedefinieerd. Een ComponentResourceKey kan onafhankelijk worden gedefinieerd en gebruikt, ongeacht waar de TypeInTargetAssembly is gedefinieerd, maar moet uiteindelijk het type oplossen via assembly's waarnaar wordt verwezen.

Een algemeen gebruik voor ComponentResourceKey is het definiëren van sleutels die vervolgens worden weergegeven als leden van een klasse. Voor dit gebruik gebruikt u de ComponentResourceKey klasseconstructor, niet de markeringsextensie. Raadpleeg ComponentResourceKeyof de sectie 'Sleutels definiëren en verwijzen naar themabronnen' van het onderwerp Overzicht van controlebeheervoor meer informatie.

Voor zowel het tot stand brengen van sleutels als het verwijzen naar sleutelbronnen, wordt de attribuutsyntaxis vaak gebruikt voor de markup-extensie ComponentResourceKey.

De compacte syntaxis die wordt weergegeven, is afhankelijk van de ComponentResourceKey constructorhandtekening en het positionele parametergebruik van een markeringsextensie. De volgorde waarin de targetTypeName en targetID worden gegeven, is belangrijk. De uitgebreide syntaxis is afhankelijk van de ComponentResourceKey parameterloze constructor en stelt vervolgens TypeInTargetAssembly en ResourceId in op een manier die vergelijkbaar is met een werkelijke kenmerksyntaxis op een objectelement. In de uitgebreide syntaxis is de volgorde waarin de eigenschappen zijn ingesteld, niet belangrijk. De relatie en mechanismen van deze twee alternatieven (compact en uitgebreid) wordt in meer detail beschreven in het onderwerp Markup Extensions en WPF XAML.

Technisch gezien kan de waarde voor targetID elk object zijn, het hoeft geen tekenreeks te zijn. Het meest voorkomende gebruik in WPF is echter om de targetID-waarde uit te lijnen met formulieren die tekenreeksen zijn, en waar dergelijke tekenreeksen geldig zijn in de XamlName Grammar.

ComponentResourceKey kan worden gebruikt in de syntaxis van objectelementen. In dit geval is het opgeven van de waarde van zowel de eigenschappen TypeInTargetAssembly als ResourceId vereist om de extensie correct te initialiseren.

In de WPF XAML-lezer-implementatie wordt de verwerking voor deze markeringsextensie gedefinieerd door de ComponentResourceKey-klasse.

ComponentResourceKey is een markeringsextensie. Markeringsextensies worden doorgaans geïmplementeerd wanneer er een behoefte is om kenmerkwaarden anders in te stellen dan letterlijke waarden of handlernamen, en deze behoefte is breder dan alleen typeconverters toepassen op bepaalde typen of eigenschappen. Alle markeringsextensies in XAML gebruiken de tekens { en } in hun kenmerksyntaxis. Dit is de conventie waarmee een XAML-processor herkent dat een markeringsextensie het kenmerk moet verwerken. Zie Markup Extensions en WPF XAMLvoor meer informatie.

Zie ook