x:Type-Markuperweiterung
Stellt das Type-CLR-Objekt bereit, das der zugrunde liegende Typ für einen angegebenen XAML-Typ ist.
Verwendung von XAML-Attributen
<object property="{x:Type prefix:typeNameValue}" .../>
Verwendung von XAML-Objektelementen
<x:Type TypeName="prefix:typeNameValue"/>
XAML-Werte
Wert | Beschreibung |
---|---|
prefix |
Optional. Ein Präfix, das einem nicht standardmäßigen XAML-Namespace zugeordnet ist. Das Angeben eines Präfix ist häufig nicht erforderlich. Siehe Hinweise. |
typeNameValue |
Erforderlich. Ein Typname, der in den aktuellen XAML-Standardnamespace aufgelöst werden kann, oder das angegebene zugeordnete Präfix, falls prefix angegeben wurde. |
Hinweise
Die x:Type
-Markuperweiterung hat eine ähnliche Funktion wie der Operator typeof()
in C# oder der Operator GetType
in Microsoft Visual Basic.
Die x:Type
-Markuperweiterung stellt eine Zeichenfolgenkonvertierung für Eigenschaften bereit, die den Typ Type akzeptieren. Die Eingabe ist ein XAML-Typ. Die Beziehung zwischen dem XAML-Eingabetyp und dem Typeder CLR-Ausgabe besteht darin, dass die Ausgabe Type der UnderlyingType der Eingabe XamlType ist, nachdem auf der Grundlage des XAML-Schemakontexts und des IXamlTypeResolver-Diensts, der vom Kontext bereitgestellt wird, der erforderliche XamlType ermittelt wurde.
In .NET-XAML-Diensten wird die Handhabung dieser Markuperweiterung durch die TypeExtension-Klasse definiert.
Bei bestimmten Frameworkimplementierungen können einige Eigenschaften, die Type als Wert verwenden, den Namen des Typs direkt akzeptieren (Zeichenfolgenwert vom Typ Name
). Die Implementierung dieses Verhaltens ist jedoch komplex. Beispiele finden Sie im Abschnitt „Hinweise zur WPF-Verwendung“ weiter unten.
Die Attributsyntax ist die mit dieser Markuperweiterung am häufigsten verwendete Syntax. Das Zeichenfolgentoken, das auf die x:Type
-Bezeichnerzeichenfolge folgt, wird als TypeName-Wert der zugrunde liegenden TypeExtension-Erweiterungsklasse zugeordnet. Unter dem Standardkontext des XAML-Schemas für .NET-XAML-Dienste, der auf CLR-Typen basiert, ist der Wert dieses Attributs entweder der Name des gewünschten Typs, oder es enthält den Name mit vorangestelltem Präfix, wenn nicht die standardmäßige XAML-Namespacezuordnung verwendet wird.
Die x:Type
-Markuperweiterung kann in der Objektelementsyntax verwendet werden. In diesem Fall ist die Angabe des Werts der TypeName-Eigenschaft erforderlich, damit die Erweiterung ordnungsgemäß initialisiert werden kann.
Die x:Type
-Markuperweiterung kann auch als ausführliches Attribut verwendet werden. Diese Verwendung ist jedoch nicht typisch: <object property="{x:Type TypeName=typeNameValue}" .../>
Hinweise zur WPF-Verwendung
Standard-XAML-Namespace und Typzuordnung
Der Standard-XAML-Namespace für die WPF-Programmierung enthält die meisten XAML-Typen, die Sie für typische XAML-Szenarien benötigen. Daher können Sie häufig Präfixe vermeiden, wenn Sie auf XAML-Typwerte verweisen. Möglicherweise müssen Sie ein Präfix zuordnen, wenn Sie auf einen Typ aus einer benutzerdefinierten Assembly verwenden oder Typen verwenden, die zwar in einer WPF-Assembly vorhanden sind, aber von einem CLR-Namespace stammen, der nicht dem Standard-XAML-Namespace zugeordnet wurde. Weitere Informationen zu Präfixen, XAML-Namespaces und Zuordnungen von CLR-Namespaces finden Sie unter XAML-Namespaces und Namespacezuordnung für WPF-XAML.
Typeigenschaften, die Typenamen als Zeichenfolge unterstützen
WPF unterstützt Techniken, die das Angeben des Werts einiger Eigenschaften vom Typ Type ermöglichen, ohne dass eine x:Type
-Markuperweiterung verwendet werden muss. Sie können stattdessen den Wert als Zeichenfolge angeben, die den Typ benennt. Beispiele hierfür sind ControlTemplate.TargetType und Style.TargetType. Die Unterstützung für dieses Verhalten wird weder über Typkonverter noch über Markuperweiterungen bereitgestellt. Stattdessen ist dies ein Verschiebeverhalten, das durch FrameworkElementFactory implementiert wird.
Silverlight unterstützt eine ähnliche Konvention. Tatsächlich unterstützt Silverlight derzeit {x:Type}
nicht für XAML und akzeptiert keine Verwendungen von {x:Type}
außerhalb einiger weniger Situationen, die speziell zur Unterstützung der XAML-Migration von WPF zu Silverlight dienen. Daher ist das Verhalten bei Typnamen als Zeichenfolgen in allen nativen Silverlight-Eigenschaftsbewertungen integriert, bei denen der Wert ein Type ist.
XAML 2009
XAML 2009 bietet zusätzliche Unterstützung für generische Typen und ändert das Featureverhalten von x:TypeArguments
und x:Type
für diese Unterstützung.
x:TypeArguments
und das zugeordnete Objektelement für eine generische Objektinstanziierung kann auf für andere Elemente als das Stammelement angewandt werden. Weitere Informationen finden Sie im Abschnitt „XAML 2009“ der x:TypeArguments-Anweisung.XAML 2009 unterstützt eine Syntax zum Angeben der Einschränkung eines generischen Typs im Markup. Dies kann von
x:TypeArguments
, vonx:Type
oder von beiden Features in Kombination verwendet werden.Die XAML-Implementierung in WPF fügt beim Verarbeiten von XAML 2009 für Ladevorgänge diese Funktion auch dem impliziten Typkonvertierungsverhalten für bestimmte Frameworkeigenschaften hinzu, die den Typ Type verwenden.
In WPF können Sie XAML 2009-Funktionen verwenden, jedoch nur für Loose XAML (nicht markupkompilierte XAML). Markupkompilierte XAML für WPF und die BAML-Form von XAML unterstützen die XAML 2009-Schlüsselwörter und -Funktionen derzeit nicht.
Weitere Informationen
.NET Desktop feedback