Freigeben über


Generika in XAML

.NET XAML Services, wie in System.Xaml implementiert, bietet Unterstützung für die Verwendung generischer CLR-Typen. Diese Unterstützung umfasst das Angeben der Einschränkungen von Generika als Typargument und das Erzwingen der Einschränkung durch Aufrufen der entsprechenden Add-Methode für generische Sammlungsfälle. In diesem Thema werden Aspekte der Verwendung und Verweisen auf generische Typen in XAML beschrieben.

x:TypeArguments

x:TypeArguments ist eine von der XAML-Sprache definierte Direktive. Wenn sie als Element eines XAML-Typs verwendet wird, der von einem generischen Typ unterstützt wird, übergibt x:TypeArguments eingeschränkte Typargumente des generischen Typs an den Sicherungskonstruktor. Referenzsyntax für die Verwendung von .NET XAML Services von x:TypeArguments, die Syntaxbeispiele enthält, finden Sie unter x:TypeArguments-Direktive.

Da x:TypeArguments eine Zeichenfolge verwendet und einen Typkonverter gesichert hat, wird sie in der Regel in der XAML-Verwendung als Attribut deklariert.

Im XAML-Knotendatenstrom können die von x:TypeArguments deklarierten Informationen aus XamlType.TypeArguments an einer StartObject Position im Knotendatenstrom abgerufen werden. Der Rückgabewert von XamlType.TypeArguments ist eine Liste XamlType Werte. Bestimmt, ob ein XAML-Typ einen generischen Typ darstellt, kann durch Aufrufen von XamlType.IsGenericerfolgen.

Regeln und Syntaxkonventionen für Generics in XAML

In XAML muss ein generischer Typ immer als eingeschränkter generischer Typ dargestellt werden. Ein nicht eingeschränktes generisches Element ist nie im XAML-Typsystem oder einem XAML-Knotenstream vorhanden und kann nicht im XAML-Markup dargestellt werden. Ein generisches Objekt kann in der XAML-Attributsyntax für Fälle referenziert werden, in denen es sich um eine geschachtelte Typeinschränkung handelt, auf die von x:TypeArgumentsverwiesen wird, oder für Fälle, in denen x:Type einen CLR-Typverweis für einen generischen Typ bereitstellt. Verweisen auf Generika wird durch die von .NET XAML Services definierte XamlTypeTypeConverter Klasse unterstützt.

Das durch XamlTypeTypeConverter aktivierte XAML-Attributsyntaxformular ändert die typische MSIL/CLR-Syntaxkonvention, die Winkelklammern für Typen und Einschränkungen von Generika verwendet, und ersetzt stattdessen Klammern für den Einschränkungscontainer. Ein Beispiel finden Sie unter x:TypeArguments Directive.

Features für Generics und XAML 2009

Wenn Sie XAML 2009 anstelle der Zuordnung der CLR-Basistypen verwenden, um XAML-Typen für grundsprachliche Grundtypen abzurufen, können Sie integrierten XAML 2009-Typen als Informationselemente in x:TypeArgumentsverwenden. Sie können beispielsweise Folgendes deklarieren (Präfixzuordnungen werden nicht angezeigt, aber x ist der XAML-Sprach-XAML-Namespace für XAML 2009):

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

Generics-Unterstützung in WPF

Für die XAML 2006-Verwendung, die speziell auf WPF ausgerichtet ist, müssen x:Class- auch für dasselbe Element wie x:TypeArgumentsbereitgestellt werden, und dieses Element muss das Stammelement in einem XAML-Dokument sein. Das Stammelement muss einem generischen Typ mit mindestens einem Typargument zugeordnet werden. Ein Beispiel ist PageFunction<T>.

Mögliche Problemumgehungen zur Unterstützung generischer Verwendungen sind das Definieren einer benutzerdefinierten Markuperweiterung, die generische Typen zurückgeben kann, oder die Bereitstellung einer Umbruchklassendefinition, die von einem generischen Typ abgeleitet wird, aber die generische Einschränkung in der eigenen Klassendefinition flacht.

In WPF können Sie XAML 2009-Features zusammen mit x:TypeArgumentsverwenden, jedoch nur für loses 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.

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

Siehe auch