Freigeben über


x:Shared-Attribut

Wenn dieses Attribut auf false gesetzt ist, ändert es das WPF-Ressourcenabrufverhalten so, dass bei Anforderungen einer Attributressource 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

x:Shared wird in den XAML-Sprachnamenbereich zugeordnet und wird von .NET Framework-XAML-Diensten und seinen XAML-Readern 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 als Attribut nur nützlich, wenn es auf ein Objekt angewendet wird, das innerhalb eines WPF ResourceDictionary vorhanden ist. Andere Verwendungen lösen keine Analyseausnahmen oder andere Fehler aus, aber sie haben keine Auswirkungen.

Die Bedeutung von x:Shared wird nicht in der XAML-Sprachspezifikation angegeben. Andere XAML-Implementierungen, z. B. die, die auf .NET Framework-XAML-Diensten aufbauen, stellen nicht notwendigerweise Ressourcenfreigabeunterstützung bereit. Solche XAML-Implementierungen könnten ähnliches Verhalten im unterstützenden Framework bereitstellen, das auch x:Shared-Werte verwendete.

In WPF lautet die standardmäßige x:Shared-Bedingung von Ressourcen true. Diese Bedingung bedeutet, dass jede Ressourcenanforderung immer dieselbe Instanz zurückgibt.

Beim Ändern eines Objekts, das über eine Ressourcen-API, wie z.B. 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. Weitere Informationen zu den Unterschieden zwischen statischen und dynamischen Ressourcenverweisen finden Sie unter Übersicht über Ressourcen.

Das explizite Angeben von x:Shared="true" erfolgt selten, weil dies bereits die Standardeinstellung ist. Es gibt keine direkte Codeentsprechung für x:Shared im WPF-Objektmodell. Es kann nur in einer XAML-Verwendung angegeben werden und muss entweder durch das Standard-WPF-Verhalten oder in einem Zwischen-XAML-Knotenstream auf dem Ladepfad verarbeitet werden, wenn es mit .NET Framework-XAML-Diensten und seinen XAML-Readern verarbeitet wird.

Ein Szenario für x:Shared="false" ist, wenn Sie eine abgeleitete Klasse von FrameworkElement oder FrameworkContentElement als Ressource definieren und dann 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 x:Shared="false" ist dies nicht gültig, weil die Auflistung die Eindeutigkeit ihres Inhalts erzwingt. Allerdings erstellt das x:Shared="false"-Verhalten eine weitere identische Instanz der Ressource, statt die gleiche 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.

In WPF ist x:Shared nur unter den folgenden Bedingungen gültig:

Siehe auch

Referenz

ResourceDictionary

Konzepte

Übersicht über Ressourcen

Weitere Ressourcen

Basiselemente