ResourceDictionary Class

Definiert ein Wörterbuch, das Ressourcen enthält, die von Komponenten der App verwendet werden. Dieses Wörterbuch ist auf das Definieren der Ressourcen in XAML und das anschließende Abrufen dieser Ressourcen mithilfe der StaticResource- oder ThemeResource-Markuperweiterungen in XAML ausgerichtet. Alternativ können Sie auf Ressourcen im Code zugreifen. Dies ist jedoch weniger gebräuchlich.

Vererbung

Object
  DependencyObject
    ResourceDictionary

Syntax


public class ResourceDictionary : DependencyObject,
    IDictionary<Object, Object>,
    IEnumerable<KeyValuePair>


<ResourceDictionary>
  oneOrMoreResources
</ResourceDictionary>


<frameworkElement>
  <frameworkElement.Resources>
    oneOrMoreResources
  </frameworkElement.Resources>
</frameworkElement>

XAML Values

oneOrMoreResources

Mindestens ein Objektelement, das eine XAML-Syntax zur Objektelementerstellung unterstützt und auf das als Ressourcen mit Schlüssel verwiesen werden soll. Jede Ressource, die Sie angeben, muss über einen eindeutigen Wert als Schlüssel verfügen.

Attribute

[MarshalingBehavior(Agile)]
[Threading(Both)]
[Version(0x06020000)]
[WebHostHidden()]

Member

ResourceDictionaryKlasse hat diese Membertypen:

Konstruktoren

ResourceDictionaryKlasse hat diese Konstruktoren.

KonstruktorBeschreibung
ResourceDictionary Initializes a new instance of the ResourceDictionary class.

 

Methoden

The ResourceDictionary Klasse hat diese Methoden. Es erbt auch Methoden von Object Klasse.

MethodeBeschreibung
Add(KeyValuePair) [C#, VB]Adds a new key-value pair to the ResourceDictionary.
Add(Object) [C#, VB]Adds an item to the ResourceDictionary.
Clear Removes all items from this ResourceDictionary.
ClearValue Clears the local value of a dependency property. (Geerbt von DependencyObject)
Contains [C#, VB]Returns a value that indicates whether a specified key-value pair exists in the ResourceDictionary.
ContainsKey [C#, VB]Returns a value that indicates whether a specified key exists in the ResourceDictionary.
CopyTo [C#, VB]Copies the elements of the collection to an array, starting at a particular array index.
First [C++]Returns an iterator for the items in the collection.
GetAnimationBaseValue Returns any base value established for a dependency property, which would apply in cases where an animation is not active. (Geerbt von DependencyObject)
GetValue Returns the current effective value of a dependency property from a DependencyObject. (Geerbt von DependencyObject)
GetView [C++]Retrieves a view against the ResourceDictionary.
HasKey [C++]Returns whether the ResourceDictionary has an entry with the requested key.
Insert [C++]Adds a new entry to the ResourceDictionary.
Lookup [C++]Returns the value from the requested key, if an entry with that key exists.
ReadLocalValue Returns the local value of a dependency property, if a local value is set. (Geerbt von DependencyObject)
Remove [C++]Removes a specific item from the ResourceDictionary.
Remove(KeyValuePair) [C#, VB]Removes a specific key-value pair from the ResourceDictionary.
Remove(Object) [C#, VB]Removes a specific item from the ResourceDictionary.
SetValue Sets the local value of a dependency property on a DependencyObject. (Geerbt von DependencyObject)
TryGetValue [C#, VB]Returns a value that indicates whether a specified key exists in the ResourceDictionary. If an item with that key exists, the item is retrieved as an out parameter.

 

Eigenschaften

Der ResourceDictionaryKlasse hat diese Eigenschaften.

EigenschaftZugriffstypBeschreibung

Count [C#, VB]

SchreibgeschütztGets the number of elements contained in the collection.

Dispatcher

SchreibgeschütztGets the CoreDispatcher that this object is associated with. (Geerbt von DependencyObject)

IsReadOnly [C#, VB]

SchreibgeschütztGets a value indicating whether the dictionary is read-only.

Item [C#, VB]

Lese-/SchreibzugriffGets or sets the element value at the specified key index.

Keys [C#, VB]

SchreibgeschütztGets an ICollection object containing the keys of the ResourceDictionary.

MergedDictionaries

SchreibgeschütztGets a collection of the ResourceDictionary dictionaries that constitute the various resource dictionaries in the merged dictionaries.

Size [C++]

SchreibgeschütztGets the number of elements contained in the collection.

Source

Lese-/SchreibzugriffGets or sets a Uniform Resource Identifier (URI) that provides the source location of a merged resource dictionary.

ThemeDictionaries

SchreibgeschütztGets a collection of merged resource dictionaries that are specifically keyed and composed to address theme scenarios, for example supplying theme values for HighContrast.

Values [C#, VB]

SchreibgeschütztGets an ICollection object containing the values of the ResourceDictionary .

 

Hinweise

Der Zweck von ResourceDictionary in der App besteht darin, es Ihnen zu ermöglichen, Ressourcen in XAML zu definieren und diese dann über XAML-Verweise abzurufen, die entweder mit der StaticResource- oder der ThemeResource-Markuperweiterung erstellt werden. Auf diese Weise können Sie Ressourcen wiederverwenden, die Sie bereits einmal in XAML definiert haben. Sie können die Komplexität des XAML-Codes steuern, indem Sie empfohlene Vorgehensweisen zum Zerlegen von in XAML definierten Elementen und allen gemeinsam genutzten Werten befolgen. Außerdem können Sie erzwingen, dass bestimmte Werte wie Pinselfarben oder Pixelmaße einheitlich verwendet werden. Weitere Informationen zur Verwendung von ResourceDictionary für XAML-Ressourcentechniken finden Sie unter ResourceDictionary- und XAML-Ressourcenverweise.

Der ResourceDictionary-Typ wird als Wert von zwei wichtigen Eigenschaften in der Gesamtstruktur einer Windows Store-App verwendet, die C++, C# oder Visual Basic verwendet: FrameworkElement.Resources und Application.Resources. XAML-Dateien, die Ihnen von einer als Ausgangspunkt dienenden Projektvorlage für eine App bereitgestellt werden, enthalten Anfangswerte für FrameworkElement.Resources, und die Datei app.xaml kann Anfangswerte für Application.Resources enthalten. Welche Ressourcen dort im Einzelnen definiert sind, hängt davon ab, welche Projektstartvorlage Sie verwenden.

ResourceDictionary dient gelegentlich auch als Stammelement einer XAML-Datei. Dies ist der Fall, wenn ein bestimmter Ressourcenbereich dem ResourceDictionary-Hauptwert von FrameworkElement.Resources und Application.Resources entnommen wird, beispielsweise durch MergedDictionaries oder ThemeDictionaries. Ein Beispiel hierfür ist die Datei generic.xaml, die Sie in den als Ausgangspunkt dienenden Projektvorlagen für ein XAML-Steuerelement mit Vorlagen finden.

Ressourcenwörterbücher sind eine grundsätzlich XAML-orientierte Funktion, und die Verwendung von ResourceDictionary in XAML ist üblicher als die von Code. Das Definieren von Schlüsselressourcen im XAML-Markup, auf die später als Vorlagen oder als zusätzliche Ressourcen verwiesen wird, die für diese Vorlagen erforderlich sind, ist eines der Hauptszenarien der Entwicklung von XAML-Benutzeroberflächen.

In XAML werden die Schlüssel für ResourceDictionary-Elemente deklariert, indem das x:Key-Attribut für Elemente festgelegt wird, die die XAML-Ressourcen darstellen. Wenn Sie versuchen, ein untergeordnetes Element, das über keinen Schlüsselwert verfügt, in ResourceDictionary einzufügen, wird in der Regel eine XAML-Analyseausnahme oder eine Windows-Runtime-Ausnahme ausgelöst. Die Ausnahmebedingung könnte auch als Warnung von XAML-Entwurfsoberflächen dokumentiert werden. Es gibt jedoch drei wichtige Fälle, in denen ein untergeordnetes ResourceDictionary-Element keinen x:Key-Wert benötigt:

  • Eine Style-Ressource kann ihren TargetType-Wert als impliziten Ressourcenschlüssel verwenden. Weitere Informationen zur Funktionsweise von impliziten Schlüsseln für Stile und Steuerelementvorlagen finden Sie unter Schnellstart: Formatieren von Steuerelementen.
  • Die ResourceDictionary-Elemente mit Source-Werten, die ResourceDictionary.MergedDictionaries-Werte darstellen, können kein x:Key-Attribut für ResourceDictionary aufweisen. In jeder zusammengeführten Wörterbuchdatei (auf die durch einen URI als zugehörige Source verwiesen wird) benötigen Sie Schlüssel für jede Ressource.
  • Aus Legacygründen kann das x:Name-Attribut statt des x:Key-Attributs verwendet werden. Mit x:Name allein wird die XAML-Ressourcensuche nach diesem Element jedoch nicht aktiviert. Das als Identifizierungskonvention dienende x:Name-Attribut wird für bestimmte Szenarien wie das Definieren von Storyboard-Animationen verwendet. Weitere Informationen finden Sie unter x:Name-Attribut.

In C# oder Microsoft Visual Basic können Sie eine ResourceDictionary durchlaufen. In vielen Fällen, z. B. bei der Anwendung von foreach-Syntax, führt der Compiler diese Umwandlung für Sie durch, und Sie müssen nicht explizit in IEnumerable umwandeln. Wenn Sie explizit umwandeln müssen, wenn Sie beispielsweise GetEnumerator aufrufen möchten, wandeln Sie um zu IEnumerable<T> mit einer KeyValuePair<Object,Object>-Einschränkung.

ResourceDictionary und Microsoft Visual Studio

Visual Studio stellt eine Seitenauswahl für Neues Element hinzufügen für ein Ressourcenwörterbuch bereit. Verwenden Sie diese Option, wenn Sie ein neues Loose XAML-Ressourcenwörterbuch definieren möchten, beispielsweise als Quelle für ein zusammengeführtes Wörterbuch. Visual Studio fügt dem Projekt auch ein Loose XAML-Ressourcenwörterbuch hinzu, wenn Sie Neues Element hinzufügen verwenden, um ein Steuerelement mit Vorlagen zu erstellen. Dieses Ressourcenwörterbuch stellt die standardmäßige Designvorlagen bereit. Visual Studio erstellt möglicherweise ein neues ResourceDictionary für Sie in Ihrem XAML-Code, wenn Sie Kopien von Stilen oder Vorlagen bearbeiten und für den ausgewählten Ressourcenspeicherort (App, Seite oder eigenständiger Speicherort) noch kein ResourceDictionary vorhanden ist.

Hinweise zur XAML-Syntax

Beachten Sie, dass die implizite XAML-Auflistungssyntax für ResourceDictionary kein Objektelement für das ResourceDictionary enthält. Dies ist ein Beispiel einer impliziten XAML-Auflistungssyntax. Ein Tag, der das Auflistungselement darstellt, kann weggelassen werden. Die der Auflistung hinzugefügten Elemente werden als untergeordnete Elemente eines Eigenschaftenelements einer Eigenschaft angegeben, deren zugrunde liegender Typ eine Add-Wörterbuch- bzw. Zuordnungsmethode unterstützt.

Für ein zusammengeführtes Ressourcenwörterbuch müssen Sie explizit ein ResourceDictionary-Objektelement deklarieren, damit Sie auch das ResourceDictionary.MergedDictionaries-Eigenschaftenelement und Source deklarieren können. Es gibt also mindestens zwei betreffende ResourceDictionary-Objektelemente, und Sie verwenden diese Syntax.


<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="uri" />
    ...
  </ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary>

In dieser Syntax ist das äußere ResourceDictionary das primäre ResourceDictionary. Das innere ResourceDictionary ist das ResourceDictionary, das zusammengeführt wird.

Für die implizite Auflistungsverwendung wird der für die FrameworkElement.Resources-Eigenschaft geeignete Platzhalter gezeigt. Sie können diese implizite Auflistungsverwendung auch für die Application.Resources-Eigenschaft verwenden, oder potenziell für eine benutzerdefinierte Eigenschaft, die ResourceDictionary als Eigenschaftstyp verwendet.

Gemeinsam nutzbare Typen und UIElement-Typen

Ein Ressourcenwörterbuch ist eine Methode zum Definieren von freigegebenen Typen und Werten dieser Typen in XAML. Nicht alle Typen oder Werte eignen sich für die Verwendung in einem ResourceDictionary. Typen, für die Freigabe unterstützt wird, sind z. B. Style, jede FrameworkTemplate-Unterklasse, die systeminternen XMAL--Datentypen, Pinsel, Farben und Transformationen. Weitere Informationen zu freigabefähigen Typen finden Sie unter ResourceDictionary- und XAML-Ressourcen-Referenzen. Im Allgemeinen werden UIElement-abgeleitete Typen nicht freigeben, es sei denn, sie gehen aus Vorlagen und Vorlagenanwendungen auf einer bestimmten Instanz hervor. Abgesehen von Vorlagen, wird von einem UIElement erwartet, nur an einer Stelle in einer Objektstruktur vorhanden zu sein, nachdem es instanziiert wurde. Ein freigabefähiges UIElement würde möglicherweise gegen dieses Prinzip verstoßen.

In der Praxis ist die überwiegende Mehrzahl der in einem ResourceDictionary definierten Ressourcen eine der folgenden:

  • Steuerelementvorlagen für ein Steuerelement, einschließlich der zugehörigen visuellen Zustände
  • Unterstützende Stile für Teile von Steuerelementen
  • Stile für Elemente, die Bestandteile typischer App-Benutzeroberflächen, jedoch keine Steuerelemente sind, beispielsweise TextBlock
  • Datenvorlagen für Steuerelemente und Bereiche, die Datenbindung verwenden
  • Bestimmte Brush-Werte, meist SolidColorBrush
  • Zeichenfolgen oder andere Konstanten, die niemals lokalisiert werden müssen (Zeichenfolgen und Konstanten, die lokalisiert werden müssen, sollten sich nicht in einem ResourceDictionary befinden; weitere Informationen finden Sie unter Schnellstart: Übersetzen von UI-Ressourcen)

Zugreifen auf ein ResourceDictionary-Objekt in Code-Behind

Es wurde festgestellt, dass Sie ResourceDictionary am häufigsten über XAML-Definitionen verwenden. Sie können jedoch auch zur Laufzeit auf ResourceDictionary zugreifen, nachdem das XAML-ResourceDictionary analysiert wurde. Je nach verwendeter Programmiersprache verfügt ResourceDictionary über unterschiedliche Code-Behind-APIs für die Unterstützung von Auflistungen:

  • Für C# oder Visual Basic verwenden Sie APIs, die IDictionary<K,V> und IEnumerable<T> implementieren. Beispielsweise TryGetValue oder der Item-Indexer.
  • Für Visual C++-Komponentenerweiterungen (C++/CX) verwenden Sie APIs, die IMap<K,V> und IIterable<T> implementieren. Beispiel: Lookup.
  • APIs wie Source, die nicht Teil der Unterstützung für Auflistungen sind, sind in allen Sprachen identisch.

Weitere Informationen zur Verwendung von ResourceDictionary in Code finden Sie unter ResourceDictionary- und XAML-Ressourcenverweise im Abschnitt "Verwenden von ResourceDictionary in Code".

Systemressourcen

Einige Designressourcen verweisen auf Systemressourcenwerte als zugrunde liegende Subwerte. Eine Systemressource ist ein spezieller Ressourcenwert, der in keinem XAML-Ressourcenwörterbuch enthalten ist. Diese Werte basieren darauf, dass die Windows-Runtime XAML in der Weise unterstützt, dass Werte vom System selbst weitergeleitet und in einer Form dargestellt werden, auf die eine XAML-Ressource verweisen kann.

Ressourcenladeoptimierung in Windows 8.1

Ab Windows 8.1 gibt es eine Ressourcenladenoptimierung, die vom App-Modell und Windows-Runtime-XAML-Parser aktiviert ist. Bei Windows 8 hat der XAML-Parser Ressourcen von app.xaml geladen und jeden davon als Objekte als Teil des Starts erstellt. Das ist bei großen Wörterbüchern nicht sehr effizient. Darüber hinaus enthielten die Ressourcen die Elemente, die von allen drei Motiven benötigt wurden. Zwei der drei Motive wären sogar nicht aktiv. Ab Windows 8.1 erstellt der XAML-Parser nur die Ressourcen, wenn sie ausdrücklich angefordert werden. Die Anforderung kann von anderen Ressourcen oder vom XAML-Code einer App oder einer Seite stammen, wenn diese geladen wird. Dieses Parserverhalten minimiert die benötigte Zeit zum Lesen des Wörterbuchs der App-Ebene während des Starts und ermöglicht in den meisten Fällen ein schnelleres Laden der ersten App-Seite. Die Ressourcen, die von einem anderen derzeit nicht aktiven Design benötigt werden, werden nur geladen, wenn dieses Design vom Benutzer als zu aktivierendes Design ausgewählt wird. Zu diesem Zeitpunkt wird jede Ressource, in der ThemeResource-Markuperweiterung für die Anforderung verwendet wurde, auf der Basis des neuerdings aktiven Designs neu berechnet.

Windows 8-Verhalten

Windows 8 verfügte nicht über die Optimierungen, die oben beschrieben sind. Die Analyse von ResourceDictionary für Application.Resources musste erst beendet werden, bevor eine andere Seite als der Begrüßungsbildschirm in das Window-Element der App geladen werden konnte. Deswegen stoßen Sie möglicherweise auf einige Unterschiede bei der zeitlichen Steuerung, wenn Sie der App Windows 8.1 als neue Zielversion zuweisen. Die App sollte schneller geladen werden. Es ist aber unter Umständen nicht möglich, diese Verbesserung von anderen Änderungen zu isolieren, die Sie am App-Code im Rahmen der Neuzuweisung vorgenommen haben. Szenarien, in denen die Konstruktoren vom Parser aufgerufen werden, u. a. für Objekte wie Application-Objekte, Konverter oder andere benutzerdefinierte Klassen, sind einige Bereiche, in denen Sie Änderungen an den zeitlichen Steuerungswerten aufgrund eines optimierten Ladens von Ressourcen erkennen. Apps, die für Windows 8 kompiliert wurden, jedoch unter Windows 8.1 ausgeführt werden, verwenden weiterhin das Windows 8-Verhalten.

Weitere Informationen zur Leistung und zur Verarbeitung von XAML-Ressourcen finden Sie unter Optimieren des XAML-Ladevorgangs.

Anforderungen

Mindestens unterstützter Client

Windows 8 [Nur Windows Store-Apps]

Mindestens unterstützter Server

Windows Server 2012 [Nur Windows Store-Apps]

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

DependencyObject
IMap(Object, Object)
IDictionary<K,V>
ResourceDictionary- und XAML-Ressourcenverweise
Anwendungsressourcen- und Lokalisierungsbeispiel
ThemeResource-Markuperweiterung
StaticResource-Markuperweiterung
x:Key-Attribut

 

 

Anzeigen:
© 2014 Microsoft