Samengevoegde woordenlijsten van bronnen (WPF .NET)
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.
Een samengevoegde woordenlijst maken
In markup gebruikt u de volgende syntax om een samengestelde resourcewoordenlijst in een pagina te introduceren.
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
<ResourceDictionary Source="myresourcedictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
Het element ResourceDictionary heeft geen x:Key Directive, wat over het algemeen vereist is voor alle items in een resourceverzameling. Maar een andere ResourceDictionary
verwijzing binnen de MergedDictionaries collectie is een speciaal geval, gereserveerd voor dit scenario van een samengevoegde resourcewoordenlijst. Verder kan een ResourceDictionary
die een samengevoegde resourcewoordenlijst introduceert, geen x:Key Directivebevatten.
Normaal gesproken geeft elke ResourceDictionary in de MergedDictionaries verzameling een Source kenmerk op. De waarde van Source
moet een URI (Uniform Resource Identifier) zijn die verwijst naar de locatie van het bronbestand dat samengevoegd moet worden. 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, ofwel als alternatief voor het opgeven van Source, of naast de resources die zijn opgenomen uit de opgegeven bron. Dit is echter geen veelvoorkomend scenario. Het belangrijkste scenario voor samengevoegde woordenlijsten is het samenvoegen van resources vanaf externe bestandslocaties. Als u resources binnen de markup voor een pagina wilt opgeven, definieert u deze in de hoofd-ResourceDictionary
en niet in de samengevoegde woordenboeken.
Gedrag van samengevoegde woordenlijst
Resources in een samengevoegd woordenboek bevinden zich op een locatie binnen het resource-opzoekbereik, 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 het laatste woordenboek dat sequentieel 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 geretourneerde resource uit de primaire woordenlijst. Deze scoperegels gelden zowel voor statische als voor 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 ResourceDictionary
zijn.
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 is door XamlReader.Load aan te roepen op een bestaande XAML-bestandsstroom met een ResourceDictionary
root-element en vervolgens de retourwaarde naar ResourceDictionary
te casten.
Samengevoegde woordenlijst-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 gebruikt. 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 worden gedefinieerd als onderdeel van het project als een Resource build-actie. Als u een resource opneemt .xaml-bestand in het project 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 Inhoud buildactie gebruiken, maar u moet de bestanden vervolgens naar de uitvoermap kopiëren en de resourcebestanden ook implementeren in dezelfde padrelatie als het uitvoerbare bestand.
Notitie
Gebruik de buildactie Embedded Resource 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 nog steeds Embedded Resource 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 om ernaar te verwijzen als Bron. Pack URI maakt verwijzingen mogelijk naar onderdelen van assembly's waarnaar wordt verwezen en andere technieken. Voor meer informatie over Pack-URI's, zie WPF-toepassingsresources, inhoud en gegevensbestanden.
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 aanvullende implementatiestappen vereist en http: toegang impliceert de zone internetbeveiliging.
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 eerder genoemde Pack URI strategie biedt een manier om tijdens het ontwikkelen vaak een samengevoegde resource te maken voor meerdere projecten door een assemblyreferentie 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 de http: protocol.
Het schrijven van samengevoegde woordenlijsten als lokale toepassingsbestanden of naar lokale gedeelde opslag is een ander mogelijk scenario voor het implementeren van samengevoegde woordenlijsten en toepassingen.
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 satellietresourceassemblages. Zie WPF Globalization and Localization Overviewvoor meer informatie.
Zie ook
.NET Desktop feedback