x:Type Markup Extension
Stellt das CLR-Type -Objekt, das dem zugrunde liegenden Typ für einen angegebenen XAML-Typ ist.
XAML-Attributverwendung
<object property="{x:Type prefix:typeNameValue}" .../>
XAML-Objektelementverwendung
<x:Type TypeName="prefix:typeNameValue"/>
XAML-Werte
Wert | Beschreibung |
---|---|
prefix |
Wahlfrei. Ein Präfix, das einen nicht standardmäßigen XAML-Namespace zuordnet. Das Angeben eines Präfixes ist häufig nicht erforderlich. Siehe Anmerkungen. |
typeNameValue |
Erforderlich. Ein Typname, der für den aktuellen Standard-XAML-Namespace aufgelöst werden kann; oder das angegebene zugeordnete Präfix, wenn prefix angegeben wird. |
Bemerkungen
Die x:Type
-Markuperweiterung hat eine ähnliche Funktion wie der typeof()
-Operator in C# oder dem GetType
-Operator in Microsoft Visual Basic.
Die x:Type
Markuperweiterung stellt ein Aus-Zeichenfolge-Konvertierungsverhalten für Eigenschaften bereit, die den Typ Typeverwenden. Die Eingabe ist ein XAML-Typ. Die Beziehung zwischen dem Eingabe-XAML-Typ und dem AUSGABE-CLR-Type besteht darin, dass die Ausgabe Type die UnderlyingType der Eingabe XamlTypeist, nachdem sie die erforderlichen XamlType basierend auf dem XAML-Schemakontext und dem vom Kontext bereitgestellten IXamlTypeResolver Dienst nachschlagen.
In .NET XAML Services wird die Behandlung für diese Markuperweiterung durch die TypeExtension-Klasse definiert.
In bestimmten Frameworkimplementierungen können einige Eigenschaften, die Type als Wert verwenden, den Namen des Typs direkt akzeptieren (der Zeichenfolgenwert des Typs Name
). Die Implementierung dieses Verhaltens ist jedoch ein komplexes Szenario. Beispiele finden Sie im folgenden Abschnitt "WPF-Verwendungshinweise".
Attributsyntax ist die am häufigsten verwendete Syntax für diese Markuperweiterung. Das Zeichenfolgentoken, das bereitgestellt wird, nachdem die x:Type
-Id-Zeichenfolge als TypeName Wert der zugrunde liegenden TypeExtension Erweiterungsklasse zugewiesen wurde. Unter dem standardmäßigen XAML-Schemakontext für .NET XAML Services, der auf CLR-Typen basiert, ist der Wert dieses Attributs entweder die Name des gewünschten Typs oder enthält die Name vor einem Präfix für eine nicht standardmäßige XAML-Namespacezuordnung.
Die x:Type
Markuperweiterung kann in der Objektelementsyntax verwendet werden. In diesem Fall ist die Angabe des Werts der TypeName-Eigenschaft erforderlich, um die Erweiterung ordnungsgemäß zu initialisieren.
Die x:Type
Markuperweiterung kann auch als ausführliches Attribut verwendet werden; Diese Verwendung ist jedoch nicht typisch: <object property="{x:Type TypeName=typeNameValue}" .../>
WPF-Verwendungshinweise
Standardmäßiger XAML-Namespace und -Typzuordnung
Der standardmäßige 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 beim Verweisen auf XAML-Typwerte häufig Präfixe vermeiden. Möglicherweise müssen Sie ein Präfix zuordnen, wenn Sie auf einen Typ aus einer benutzerdefinierten Assembly oder für Typen verweisen, die in einer WPF-Assembly vorhanden sind, aber aus einem CLR-Namespace stammen, der nicht dem Standard-XAML-Namespace zugeordnet wurde. Weitere Informationen zu Präfixen, XAML-Namespaces und Zuordnung von CLR-Namespaces finden Sie unter XAML-Namespaces und Namespacezuordnung für WPF-XAML-.
Typeigenschaften, die Typename-as-String unterstützen
WPF unterstützt Techniken, die das Angeben des Werts einiger Eigenschaften des Typs Type ermöglichen, ohne dass eine x:Type
Markuperweiterungsverwendung erforderlich ist. Stattdessen können Sie den Wert als Zeichenfolge angeben, die den Typ benennt. Beispiele hierfür sind ControlTemplate.TargetType und Style.TargetType. Unterstützung für dieses Verhalten wird nicht über Typkonverter oder Markuperweiterungen bereitgestellt. Stattdessen handelt es sich um ein Zurückstellungsverhalten, das über FrameworkElementFactoryimplementiert wird.
Silverlight unterstützt eine ähnliche Konvention. Tatsächlich unterstützt Silverlight derzeit keine {x:Type}
in der XAML-Sprachunterstützung und akzeptiert keine {x:Type}
Verwendungen außerhalb einiger Umstände, die WPF-Silverlight XAML-Migration unterstützen sollen. Daher ist das Typname-as-String-Verhalten in alle systemeigenen Silverlight-Eigenschaftenauswertung integriert, wobei ein Type der Wert ist.
XAML 2009
XAML 2009 bietet zusätzliche Unterstützung für generische Typen und ändert das Featureverhalten von x:TypeArguments
und x:Type
, um diese Unterstützung bereitzustellen.
x:TypeArguments
und das zugeordnete Objektelement für eine generische Objektinstanziierung können sich auf anderen Elementen als dem Stamm befinden. Weitere Informationen finden Sie im Abschnitt "XAML 2009" von x:TypeArguments-Direktive.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 den beiden Features in Kombination verwendet werden.Die WPF-XAML-Implementierung beim Verarbeiten von XAML 2009 zum Laden fügt diese Funktion auch dem impliziten Typkonvertierungsverhalten für bestimmte Frameworkeigenschaften hinzu, die Typ-Typeverwenden.
In WPF können Sie XAML 2009-Features verwenden, jedoch nur für lose XAML (XAML, das nicht markupkompiliert ist). Markupkompiliertes XAML für WPF und die BAML-Form von XAML unterstützen derzeit nicht die XAML 2009-Schlüsselwörter und -Features.
Siehe auch
.NET Desktop feedback