x:Shared-Attribut
Bei einer Festlegung auf false
ändert es das WPF-Ressourcenabrufverhalten so, dass bei Anforderungen für die zugeordnete Ressource jeweils eine neue Instanz pro Anforderung erstellt wird, anstatt die gleiche Instanz für alle Anforderungen gemeinsam zu verwenden.
Verwendung von XAML-Attributen
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
Hinweise
x:Shared
wird dem XAML-Namespace der XAML-Sprache zugeordnet und von .NET-XAML-Diensten und seinen XAML-Lesern als gültiges XAML-Sprachelement erkannt. Die angegebenen Funktionen von x:Shared
sind jedoch nur für WPF-Anwendungen und den WPF-XAML-Parser relevant. In WPF ist x:Shared
nur nützlich als Attribut, wenn es auf ein Objekt angewandt wird, das innerhalb eines WPF-ResourceDictionary vorhanden ist. Andere Verwendungen lösen zwar keine Analyseausnahmen oder sonstigen Fehler aus, aber sie haben keine Auswirkung.
Die Bedeutung von x:Shared
wird in der XAML-Sprachspezifikation nicht angegeben. Andere XAML-Implementierungen, z. B. solche, die mit .NET-XAML-Diensten erstellt werden, bieten nicht unbedingt Unterstützung für die Ressourcenfreigabe. Solche XAML-Implementierungen können ein ähnliches Verhalten im unterstützenden Framework bereitstellen, das ebenfalls x:Shared
-Werte verwendet.
In WPF ist die x:Shared
-Standardbedingung für Ressourcen true
. Diese Bedingung bedeutet, dass jede angegebene Ressourcenanforderung immer dieselbe Instanz zurückgibt.
Das Ändern eines Objekts, das über eine Ressourcen-API zurückgegeben wird, z. B. FindResource, oder das Ändern eines Objekts direkt in einem ResourceDictionary, ändert die ursprüngliche Ressource. Wenn Verweise auf diese Ressource dynamische Ressourcenverweise waren, erhalten die Consumer dieser Ressource die geänderte Ressource.
Wenn Verweise auf die Ressource statische Ressourcenverweise waren, bleiben Änderungen an der Ressource nach der XAML-Verarbeitung ohne Auswirkungen. Weitere Informationen zu statischen und dynamischen Ressourcenverweisen finden Sie in der Übersicht über XAML-Ressourcen (WPF .NET).
Eine explizite Angabe von x:Shared="true"
erfolgt nur selten, da dies bereits die Standardangabe ist. Es gibt kein direktes Codeäquivalent für x:Shared
im WPF-Objektmodell. Die Angabe ist nur in einer XAML-Verwendung möglich, und sie muss entweder vom Standard-WPF-Verhalten oder in einem zwischengeschalteten XAML-Knotenstream im Ladepfad verarbeitet werden, wenn sie mit .NET-XAML-Diensten und seinen XAML-Readern verarbeitet wird.
Ein mögliches Szenario für x:Shared="false"
wäre, dass Sie ein abgeleitete Klasse von FrameworkElement oder FrameworkContentElement als Ressource definieren und dann die Elementressource in ein Inhaltsmodell einfügen. x:Shared="false"
ermöglicht das mehrmalige Einfügen einer Elementressource in dieselbe Auflistung (z. B. eine UIElementCollection). Ohne x:Shared="false"
ist dies ungültig, da die Auflistung die Eindeutigkeit des Inhalts erzwingt. Bei x:Shared="false"
wird jedoch eine weitere identische Instanz der Ressource erstellt, anstatt dieselbe Instanz zurückzugeben.
Ein weiteres Szenario für x:Shared="false"
ist, wenn Sie eine Freezable-Ressource für Animationswerte verwenden, die Ressource jedoch für jede Animation ändern möchten.
Bei der Zeichenfolgenbehandlung von false
wird die Groß-/Kleinschreibung nicht berücksichtigt.
In WPF ist x:Shared
nur unter den folgenden Bedingungen gültig:
Das ResourceDictionary, das die Elemente mit
x:Shared
enthält, muss kompiliert werden. Das ResourceDictionary darf nicht innerhalb von Loose XAML oder für Designs verwendet werden.Das ResourceDictionary, das die Elemente enthält, darf nicht in einem anderen ResourceDictionarygeschachtelt werden. Sie können beispielsweise
x:Shared
nicht für Elemente in einem ResourceDictionary verwenden, das sich innerhalb eines Style befindet, das bereits ein ResourceDictionary-Element ist.
Weitere Informationen
.NET Desktop feedback