x:Shared-Attribut
Wenn diese Einstellung auf false
festgelegt ist, ändert das WPF-Ressourcenabrufverhalten so, dass Anforderungen für die zugeordnete Ressource eine neue Instanz für jede Anforderung erstellen, anstatt die gleiche Instanz für alle Anforderungen freizulegen.
XAML-Attributverwendung
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
Bemerkungen
x:Shared
wird dem XAML-Sprach-XAML-Namespace zugeordnet und wird von .NET XAML Services und seinen XAML-Readern als gültiges XAML-Sprachelement erkannt. Die angegebenen Funktionen von x:Shared
sind jedoch nur für WPF-Anwendungen und für den WPF-XAML-Parser relevant. In WPF ist x:Shared
nur nützlich als Attribut, wenn es auf ein Objekt angewendet wird, das in einer WPF-ResourceDictionaryvorhanden ist. Andere Verwendungen lösen keine Analyseausnahmen oder andere Fehler aus, haben aber keine Auswirkung.
Die Bedeutung von x:Shared
wird in der XAML-Sprachspezifikation nicht angegeben. Andere XAML-Implementierungen, z. B. solche, die auf .NET-XAML-Diensten aufbauen, bieten nicht unbedingt Unterstützung für die Ressourcenfreigabe. Solche XAML-Implementierungen könnten ein ähnliches Verhalten im unterstützenden Framework bieten, das auch x:Shared
Werte verwendet.
In WPF ist die standardbedingung x:Shared
für Ressourcen true
. Diese Bedingung bedeutet, dass jede gegebene 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 Verbraucher dieser Ressource die geänderte Ressource.
Wenn Verweise auf die Ressource statische Ressourcenverweise waren, sind Änderungen an der Ressource nach der XAML-Verarbeitungszeit irrelevant. Weitere Informationen zu statischen und dynamischen Ressourcenverweise finden Sie unter Übersicht über XAML-Ressourcen (WPF .NET).
Die explizite Angabe x:Shared="true"
erfolgt selten, da dies bereits der Standardwert ist. Es gibt keine direkte Codeentsprechung für x:Shared
im WPF-Objektmodell; sie kann nur in einer XAML-Verwendung angegeben werden und muss entweder vom Standardmäßigen WPF-Verhalten oder in einem zwischengeschalteten XAML-Knotendatenstrom auf dem Ladepfad verarbeitet werden, wenn sie mit .NET XAML Services und den zugehörigen XAML-Readern verarbeitet wird.
Ein Szenario für x:Shared="false"
ist, wenn Sie eine FrameworkElement oder FrameworkContentElement abgeleitete Klasse als Ressource definieren und dann die Elementressource in ein Inhaltsmodell einführen.
x:Shared="false"
ermöglicht, dass eine Elementressource mehrmals in derselben Auflistung (z. B. ein UIElementCollection) eingeführt werden kann. Ohne x:Shared="false"
ist dies ungültig, da die Sammlung die Eindeutigkeit des Inhalts erzwingt. Das verhalten x:Shared="false"
erstellt jedoch eine weitere identische Instanz der Ressource, 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 pro Animation ändern möchten.
Bei der Zeichenfolgenbehandlung von false
wird die Groß-/Kleinschreibung nicht beachtet.
In WPF ist x:Shared
nur unter den folgenden Bedingungen gültig:
Die ResourceDictionary, die die Elemente mit
x:Shared
enthält, müssen kompiliert werden. Die ResourceDictionary kann nicht in losem XAML enthalten oder für Designs verwendet werden.Die ResourceDictionary, die die Elemente enthält, dürfen nicht in einem anderen ResourceDictionarygeschachtelt werden. Sie können z. B.
x:Shared
nicht für Elemente in einem ResourceDictionary verwenden, der sich in einem Style befindet, das bereits ein ResourceDictionary Element ist.
Siehe auch
.NET Desktop feedback