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:TypeArguments
verwiesen 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:TypeArguments
verwenden. 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: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 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:TypeArguments
verwenden, 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
.NET Desktop feedback