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:

Weitere Informationen