Samengevoegde resourcewoordenlijsten
WpF-resources (Windows Presentation Foundation) ondersteunen een functie voor een samengevoegde resourcewoordenlijst. Deze functie biedt een manier om het resourcesgedeelte van een WPF-toepassing buiten de gecompileerde XAML-toepassing te definiëren. Resources kunnen vervolgens worden gedeeld tussen toepassingen en zijn ook handiger geïsoleerd voor lokalisatie.
Inleiding tot een samengevoegd resourcewoordenboek
In opmaak gebruikt u de volgende syntax om een samengevoegde resource dictionary in een pagina te introduceren:
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
<ResourceDictionary Source="myresourcedictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
Houd er rekening mee dat het element ResourceDictionary geen x:Key Directiveheeft, wat over het algemeen vereist is voor alle items in een resourceverzameling. Maar een andere ResourceDictionary-verwijzing binnen de MergedDictionaries-verzameling is een speciaal geval, gereserveerd voor dit scenario met een samengevoegd hulpbronnenwoordenboek. De ResourceDictionary die een samengevoegd bronwoordenboek introduceert, kan geen x:Key Directivehebben. Normaal gesproken geeft elke ResourceDictionary in de MergedDictionaries verzameling een Source kenmerk op. De waarde van Source moet een uniforme resource-identificator (URI) zijn die leidt naar de locatie van het bronbestand dat moet worden samengevoegd. De bestemming van die URI moet een ander XAML-bestand zijn, met ResourceDictionary als hoofdelement.
Notitie
Het is juridisch om resources te definiëren binnen een ResourceDictionary die is opgegeven als een samengevoegde woordenlijst, hetzij als alternatief voor het opgeven van Source, of naast de resources die zijn opgenomen uit de opgegeven bron. Dit is echter geen gemeenschappelijk scenario; het hoofdscenario voor samengevoegde woordenlijsten is het samenvoegen van resources van externe bestandslocaties. Als u resources binnen de opmaak voor een pagina wilt opgeven, moet u deze doorgaans definiëren in de hoofd-ResourceDictionary en niet in de samengevoegde woordenboeken.
Gedrag van samengevoegde woordenlijst
Resources in een samengevoegd woordenboek bevinden zich op een locatie in het zoekbereik van de resource, net na het bereik van het hoofdwoordenboek waarin ze zijn samengevoegd. Hoewel een resourcesleutel uniek moet zijn binnen een afzonderlijke woordenlijst, kan een sleutel meerdere keren voorkomen in een set samengevoegde woordenlijsten. In dit geval komt de geretourneerde resource uit de laatste woordenlijst die opeenvolgend in de MergedDictionaries verzameling is gevonden. Als de MergedDictionaries verzameling is gedefinieerd in XAML, is de volgorde van de samengevoegde woordenlijsten in de verzameling de volgorde van de elementen zoals opgegeven in de markeringen. Als een sleutel is gedefinieerd in de primaire woordenlijst en ook in een woordenlijst die is samengevoegd, komt de resource die wordt geretourneerd uit de primaire woordenlijst. Deze scoperegels gelden ook voor zowel statische resourceverwijzingen als dynamische resourceverwijzingen.
Samengevoegde woordenlijsten en code
Samengevoegde woordenlijsten kunnen via code aan een Resources
woordenlijst worden toegevoegd. De standaard, in eerste instantie lege ResourceDictionary die voor elke Resources
-eigenschap bestaat, heeft ook een standaard, in eerste instantie lege MergedDictionaries-verzamelingseigenschap. Als u een samengevoegde woordenlijst via code wilt toevoegen, verkrijgt u een verwijzing naar de gewenste primaire ResourceDictionary, haalt u de bijbehorende MergedDictionaries eigenschapswaarde op en roept u Add
aan op de algemene Collection
die is opgenomen in MergedDictionaries. Het object dat u toevoegt, moet een nieuwe ResourceDictionaryzijn. In code stelt u de eigenschap Source niet in. In plaats daarvan moet u een ResourceDictionary object verkrijgen door er een te maken of er een te laden. Een manier om een bestaande ResourceDictionary te laden door XamlReader.Load aan te roepen op een bestaande XAML-bestandsstroom met een ResourceDictionary root-element, en vervolgens de XamlReader.Load retourwaarde om te zetten naar ResourceDictionary.
Samengevoegde bronwoordenlijst-URI's
Er zijn verschillende technieken voor het opnemen van een samengevoegde resourcewoordenlijst, die worden aangegeven met de URI-indeling (Uniform Resource Identifier) die u gaat gebruiken. Deze technieken kunnen in grote lijnen worden onderverdeeld in twee categorieën: resources die zijn gecompileerd als onderdeel van het project en resources die niet zijn gecompileerd als onderdeel van het project.
Voor resources die zijn gecompileerd als onderdeel van het project, kunt u een relatief pad gebruiken dat verwijst naar de resourcelocatie. Het relatieve pad wordt geëvalueerd tijdens de compilatie. Uw resource moet als een buildactie voor resources worden gedefinieerd binnen het project. Als u een .xaml-resourcebestand in het project opneemt als resource, hoeft u het resourcebestand niet naar de uitvoermap te kopiëren. De resource is al opgenomen in de gecompileerde toepassing. U kunt ook de Content build-actie gebruiken, maar vervolgens moet u de bestanden naar de uitvoermap kopiëren en de resourcebestanden implementeren in dezelfde padverhouding ten opzichte van het uitvoerbare bestand.
Notitie
Gebruik de buildactie voor ingesloten resources niet. De build-actie zelf wordt ondersteund voor WPF-toepassingen, maar de resolutie van Source bevat geen ResourceManageren kan de afzonderlijke resource dus niet uit de stream scheiden. U kunt Embedded Resource nog steeds gebruiken voor andere doeleinden, zolang u ook ResourceManager hebt gebruikt om toegang te krijgen tot de resources.
Een gerelateerde techniek is het gebruik van een pack-URI naar een XAML-bestand en ernaar verwijzen als bron. Pack-URI maakt verwijzingen mogelijk naar onderdelen van assembly's waarnaar wordt verwezen en andere technieken. Zie WPF-toepassingsresource, -inhoud en gegevensbestandenvoor meer informatie over pack-URI's.
Voor resources die niet zijn gecompileerd als onderdeel van het project, wordt de URI tijdens runtime geëvalueerd. U kunt een algemeen URI-transport gebruiken, zoals bestand: of http: om naar het resourcebestand te verwijzen. Het nadeel van het gebruik van de niet-gecompileerde resourcebenadering is dat bestand: toegang vereist aanvullende implementatiestappen en http: toegang impliceert de internetbeveiligingszone.
Samengevoegde woordenlijsten opnieuw gebruiken
U kunt samengevoegde resourcewoordenlijsten tussen toepassingen opnieuw gebruiken of delen, omdat er naar de resourcewoordenlijst kan worden verwezen via een geldige URI (Uniform Resource Identifier). Precies hoe u dit doet, is afhankelijk van uw implementatiestrategie voor toepassingen en welk toepassingsmodel u volgt. De bovengenoemde Pack URI-strategie biedt een manier om tijdens de ontwikkeling eenvoudig een samengevoegde resource beschikbaar te stellen voor meerdere projecten door een assemblyverwijzing te delen. In dit scenario worden de resources nog steeds gedistribueerd door de client en moet ten minste één van de toepassingen de assembly implementeren waarnaar wordt verwezen. Het is ook mogelijk om te verwijzen naar samengevoegde resources via een gedistribueerde URI die gebruikmaakt van het HTTP-protocol.
Het schrijven van samengevoegde woordenlijsten als lokale toepassingsbestanden of lokale gedeelde opslag is een ander scenario voor het implementeren van een samengevoegde woordenlijst/toepassing.
Lokalisatie
Als resources die moeten worden gelokaliseerd, geïsoleerd zijn van woordenlijsten die worden samengevoegd in primaire woordenlijsten en als losse XAML worden bewaard, kunnen deze bestanden afzonderlijk worden gelokaliseerd. Deze techniek is een lichtgewicht alternatief voor het lokaliseren van de satellietresourceassembly's. Zie WPF Globalization and Localization Overviewvoor meer informatie.
Zie ook
.NET Desktop feedback