x:Shared-Attribut
Aktualisiert: November 2007
Wenn dieses Attribut auf false gesetzt ist, ändert es das Ressourcenabrufverhalten von Windows Presentation Foundation (WPF) so, dass bei Anforderungen einer Ressource für jede Anforderung jeweils eine neue Instanz erstellt wird, anstatt eine Instanz für alle Anforderungen zu verwenden.
Verwendung von XAML-Attributen
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
Hinweise
Die standardmäßige x:Shared-Bedingung von Ressourcen lautet true. Diese Bedingung bedeutet, dass jede Ressourcenanforderung immer dieselbe Instanz zurückgibt. Beim Ändern eines Objekts, das über eine Ressourcen-API wie FindResource zurückgegeben wird, oder beim direkten Ändern eines Objekts in einem ResourceDictionary wird die ursprüngliche Ressource geändert. Wenn es sich bei den Verweisen auf diese Ressource um dynamische Verweise gehandelt hat, erhalten die Consumer dieser Ressource die geänderte Ressource. (Wenn es sich bei den Verweisen auf die Ressource um statische Ressourcenverweise gehandelt hat, sind Änderungen der Ressource nach dem XAML-Verarbeitungszeitraum irrelevant. Ausführliche Informationen zu den Unterschieden zwischen statischen und dynamischen Ressourcenverweisen finden Sie unter Übersicht über Ressourcen.)
Das Angeben von x:Shared="true" tritt nicht häufig auf, weil dies bereits die Standardeinstellung ist. Es gibt keine direkte Codeentsprechung für x:Shared.
Ein Szenario für x:Shared="false" ist, wenn Sie eine abgeleitete Klasse von FrameworkElement oder FrameworkContentElement als Ressource definieren und die Elementressource in ein Inhaltsmodell einfügen. Mithilfe von x:Shared="false" kann eine Elementressource mehrfach in eine Auflistung eingefügt werden (z. B. in eine UIElementCollection). Ohne die Angabe x:Shared="false" wäre dies nicht zulässig, da in der Auflistung die Eindeutigkeit des Inhalts erzwungen wird. Das Verhalten x:Shared="false" erstellt im Grunde genommen jedoch eine weitere identische Instanz der Ressource, anstatt dieselbe Instanz zurückzugeben.
Ein anderes Szenario für x:Shared="false" ist, wenn Sie eine Freezable-Ressource für Animationswerte verwenden, die Ressource jedoch individuell pro Animation ändern möchten.
Bei der Zeichenfolgenbehandlung von "false" wird die Groß-/Kleinschreibung nicht berücksichtigt.
x:Shared ist nur unter den folgenden Bedingungen gültig:
Das ResourceDictionary, das die Elemente mit x:Shared enthält, muss kompiliert sein. Das ResourceDictionary darf sich nicht innerhalb von losen XAML-Daten befinden oder für Designs verwendet werden.
Das ResourceDictionary, das die Elemente enthält, darf nicht in ein anderes ResourceDictionary geschachtelt sein. Sie können x:Shared z. B. nicht für Elemente in einem ResourceDictionary verwenden, das einen Style aufweist, bei dem es sich bereits um ein ResourceDictionary-Element handelt.