x:Statische Markuperweiterung

Verweist auf jede statische Codeentität nach Wert, die auf CLS-kompatible Weise (Common Language Specification) definiert ist. Die statische Eigenschaft, auf die verwiesen wird, kann verwendet werden, um den Wert einer Eigenschaft in XAML bereitzustellen.

Verwendung von XAML-Attributen

<object property="{x:Static prefix:typeName.staticMemberName}" .../>

XAML-Werte

Wert Beschreibung
prefix Optional. Ein Präfix, das auf einen zugeordneten, nicht standardmäßigen XAML-Namespace verweist. prefix wird explizit in der Verwendung angezeigt, da selten auf statische Eigenschaften verwiesen wird, die aus einem standardmäßigen XAML-Namespace stammen. Siehe Hinweise.
typeName Erforderlich. Der Name des Typs, der das gewünschte statische Member definiert.
staticMemberName Erforderlich. Der Name des gewünschten statischen Wertemember (eine Konstante, eine statische Eigenschaft, ein Feld oder ein Enumerationswert).

Hinweise

Die Codeentität, auf die verwiesen wird, muss eines der folgenden Member sein:

  • Eine Konstante
  • Eine statische Eigenschaft
  • Ein Feld
  • Ein Enumerationswert

Wird eine andere Codeentität angegeben, z. B. eine nicht-statische Eigenschaft, wird Folgendes verursacht: ein Kompilierzeitfehler, wenn XAML Markup-kompiliert wird, oder eine XAML-Ladezeit-Analyseausnahme.

Sie können x:Static-Verweise auf statische Felder oder Eigenschaften vornehmen, die sich nicht im Standard-XAML-Namespace für das aktuelle XAML-Dokument befinden. Dies erfordert jedoch eine Präfixzuordnung. XAML-Namespaces werden fast immer im Stammelement des XAML-Dokuments definiert.

Die Lookup-Vorgänge für statische Eigenschaften können von .NET XAML-Diensten und seinen XAML-Lesern und XAML-Schreibern ausgeführt werden, wenn sie mit dem standardmäßigen XAML-Schemakontext genutzt werden. Dieser XAML-Schemakontext kann CLR-Reflexion verwenden, um die erforderlichen statischen Werte für die Objektgraphkonstruktion bereitzustellen. Die angegebene typeName ist tatsächlich ein XAML-Typname, nicht ein CLR-Typname, obwohl diese im Wesentlichen denselben Namen haben, wenn der Standard-XAML-Schemakontext oder alle vorhandenen CLR-basierten XAML-Implementierungsframeworks verwendet werden.

Gehen Sie vorsichtig vor, wenn Sie x:Static-Verweise vornehmen, die nicht direkt der Typ eines Werts der Eigenschaft sind. In der XAML-Bearbeitungssequenz rufen die angegebenen Werte aus einer Markuperweiterung keine zusätzliche Wertkonvertierung auf. Dies ist auch der Fall, wenn der x:Static-Verweis eine Textzeichenfolge erstellt und eine Wertkonvertierung für Attributwerte basierend auf der Textzeichenfolge normalerweise für dieses bestimmte Element oder für alle Memberwerte des Rückgabetyps auftritt.

Die Attributsyntax ist die mit dieser Markuperweiterung am häufigsten verwendete Syntax. Das Zeichenfolgentoken, das auf die x:Static-Bezeichnerzeichenfolge folgt, wird als Member-Wert der zugrunde liegenden StaticExtension-Erweiterungsklasse zugeordnet.

Es gibt zwei weitere XAML-Verwendungen, die technisch möglich sind. Diese Verwendungen sind jedoch weniger gängig, weil sie unnötigerweise ausführlich sind:

  1. Objektelementsyntax.

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. Attributsyntax mit expliziter Membereigenschaft für Initialisierungszeichenfolge.

    <object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
    

In der Implementierung von .NET-XAML-Diensten wird die Handhabung dieser Markuperweiterung durch die StaticExtension-Klasse definiert.

x:Static ist eine Markuperweiterung. Alle Markuperweiterungen in XAML verwenden die Zeichen { und } in der Attributsyntax. Dies ist die Konvention, durch die ein XAML-Prozessor erkennt, dass eine Markuperweiterung einen Wert angeben muss. Weitere Informationen zur Markuperweiterungen finden Sie unter Markup Extensions for XAML Overview.

Hinweise zur WPF-Verwendung

Der Standard-XAML-Namespace, den Sie für die WPF-Programmierung verwenden, enthält nicht viele nützliche statische Eigenschaften, und die meisten nützlichen statischen Eigenschaften werden unterstützt, z. B. Typkonverter, die die Verwendung erleichtern, ohne dass {x:Static} erforderlich ist. Bei statischen Eigenschaften müssen Sie ein Präfix für einen XAML-Namespace zuordnen, wenn eine der folgenden Eigenschaften zutrifft:

  • Sie verweisen auf einen Typ, der in WPF vorhanden, aber nicht Teil des Standard-XAML-Namespace für WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation) ist. Dies ist ein ziemlich gängiges Szenario für die Verwendung von x:Static. Sie können beispielsweise einen x:Static-Verweis mit einer XAML-Namespace-Zuordnung zur System-CLR-Namespace und mscorlib Assembly verwenden, um auf die statischen Eigenschaften der Environment-Klasse zu verweisen.

  • Sie verweisen auf einen Typ aus einer benutzerdefinierten Assembly.

  • Sie verweisen auf einen Typ, der in einer WPF-Assembly vorhanden ist, aber dieser Typ befindet sich in einem CLR-Namespace, der nicht als Teil des WPF-Standard-XAML-Namespace zugeordnet wurde. Die Zuordnung von CLR-Namespaces in der Standard-XAML-Namespace für WPF erfolgt durch Definitionen in den verschiedenen WPF-Assemblies (weitere Informationen zu diesem Konzept finden Sie unter XAML-Namespaces und Namespace-Zuordnung für WPF-XAML). Nicht zugeordnete CLR-Namespaces können vorhanden sein, wenn dieser CLR-Namespace hauptsächlich aus Klassendefinitionen besteht, die normalerweise nicht für XAML vorgesehen sind, z. B. System.Windows.Threading.

Weitere Informationen zur Verwendung von Präfixen und XAML-Namespaces für WPF finden Sie unter XAML-Namespaces und Namespace-Zuordnung für WPF-XAML.

Weitere Informationen