Generics in XAML

.NET-XAML-Dienst (wie in System.Xaml implementiert) bieten Unterstützung für die Verwendung generischer CLR-Typen. Diese Unterstützung umfasst auch die Angabe der Einschränkungen von Generics als Typargument und das Erzwingen der Einschränkung durch Aufruf der entsprechenden Add-Methode für generische Auflistungsfälle. In diesem Thema werden Aspekte der Verwendung und Referenzierung generischer Typen in XAML beschrieben.

x:TypeArguments

x:TypeArguments ist eine Anweisung, die in der Programmiersprache XAML definiert ist. Wenn sie als Member eines XAML-Typs verwendet wird, der auf einem generischen Typ basiert, übergibt x:TypeArguments einschränkende Typargumente des Generics an den zugrunde liegenden Konstruktor. Referenzsyntax im Zusammenhang mit der Verwendung von x:TypeArguments in .NET-XAML-Diensten, inklusive Syntaxbeispielen, finden Sie unter der x:TypeArguments-Anweisung.

Da x:TypeArguments eine Zeichenfolge akzeptiert und durch einen Typkonverter unterstützt wird, erfolgt die Deklaration in XAML in der Regel als Attribut.

Im XAML-Knotenstream können die von x:TypeArguments deklarierten Informationen von XamlType.TypeArguments an einer StartObject-Position im Knotenstream abgerufen werden. Der Rückgabewert von XamlType.TypeArguments ist eine Liste von XamlType-Werten. Ob ein XAML-Typ einen generischen Typ darstellt, kann durch Aufrufen von XamlType.IsGeneric ermittelt werden.

Regeln und Syntaxkonventionen für Generics in XAML

In XAML muss ein generischer Typ immer als eingeschränkter generischer Typ dargestellt werden. Im XAML-Typsystem oder einem XAML-Knotenstream ist nie ein uneingeschränkter generischer Typ enthalten, und er kann auch nicht im XAML-Markup dargestellt werden. Auf einen generischen Typ kann in der XAML-Attributsyntax verwiesen werden. Dies ist für Fälle vorgesehen, in denen es sich um eine geschachtelte Typeinschränkung für einen generischen Typ handelt, auf den von x:TypeArguments verwiesen wird, oder in denen x:Type einen CLR-Typverweis für einen generischen Typ bereitstellt. Das Verweisen auf Generics wird über die XamlTypeTypeConverter-Klasse unterstützt, die von .NET-XAML-Diensten definiert wird.

Die XAML-Attributsyntax von XamlTypeTypeConverter ändert die typische MSIL-/CLR-Syntaxkonvention mit spitzen Klammern für Typen und Einschränkungen von Generics und ersetzt stattdessen die Klammern für den Einschränkungscontainer. Ein Beispiel finden Sie unter der x:TypeArguments-Anweisung.

Generics und Funktionen von XAML 2009

Wenn Sie XAML 2009 anstelle der Zuordnung der CLR-Basistypen verwenden, um XAML-Typen für primitive CLR-Typen abzurufen, können Sie die integrierten XAML 2009-Typen als Informationselemente in x:TypeArguments verwenden. Beispielsweise können Sie Folgendes deklarieren (Präfixzuordnungen werden nicht gezeigt, aber x ist der XAML-Namespace für XAML 2009):

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

Unterstützung für Generics in WPF

Bei Verwendung von XAML 2006 speziell für WPF muss x:Class auch für dasselbe Element wie x:TypeArguments bereitgestellt werden, und dieses Element muss das Stammelement in einem XAML-Dokument sein. Das Stammelement muss einem generischen Typ mit mindestens einem Typargument zugeordnet sein. z. B. PageFunction<T>.

Mögliche Problemumgehungen zur Unterstützung der Verwendung von Generics umfassen das Definieren einer benutzerdefinierten Markuperweiterung, die generische Typen zurückgeben kann, oder das Bereitstellen einer umschließenden Klassedefinition, die von einem generischen Typ abgeleitet ist, aber die generische Einschränkung in der eigenen Klassendefinition vereinfacht.

In WPF können Sie XAML 2009-Funktionen zusammen mit x:TypeArguments 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.

Benutzerdefinierte Workflows in Windows Workflow Foundation für .NET Framework 3.5 unterstützen keine generische XAML-Verwendung.

Weitere Informationen