Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die in "System.Xaml" implementierten .NET Framework-XAML-Dienste bieten Unterstützung für die Verwendung generischer CLR-Typen. Diese Unterstützung umfasst das Angeben der Einschränkungen der Generika als Typargument und das Erzwingen der Einschränkung durch das Aufrufen der entsprechenden Add-Methode für generische Auflistungsfälle. In diesem Thema werden Aspekte der Verwendung von generischen Typen und des Verweisens auf generische Typen in XAML beschrieben.
x:TypeArguments
x:TypeArguments ist eine durch die XAML-Sprache definierte Direktive. Bei Verwendung als Member eines XAML-Typs, der von einem generischen Typ unterstützt wird, übergibt x:TypeArguments einschränkende Typargumente vom generischen an den unterstützenden Konstruktor. Die Verweissyntax für die Verwendung von x:TypeArguments in .NET Framework-XAML-Diensten und Syntaxbeispiele finden Sie unter x:TypeArguments-Direktive.
Da das x:TypeArguments-Element eine Zeichenfolge annimmt und Typkonverterunterstützung aufweist, wird es in der Regel unter XAML als Attribut deklariert.
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 mit XamlType-Werten. Durch den Aufruf von XamlType.IsGeneric wird festgelegt, ob ein XAML-Typ einen generischen Typ darstellen darf.
Regeln und Syntaxkonventionen für Generika in XAML
In XAML muss ein generischer Typ immer als eingeschränkt generisch dargestellt werden. Ein uneingeschränkt generischer Typ kann im XAML-Typsystem oder einem XAML-Knotenstream nicht vorhanden sein und kann nicht in XAML-Markup dargestellt werden. Auf einen generischen Typ kann in XAML-Attributsyntax verwiesen werden, wenn von x:TypeArguments auf eine geschachtelte Typeinschränkung eines generischen Typs verwiesen wird oder wenn von x:Type ein CLR-Typverweis für einen generischen Typ bereitgestellt wird. Dies wird durch die von .NET Framework-XAML-Diensten definierte XamlTypeTypeConverter-Klasse unterstützt.
Das von XamlTypeTypeConverter aktivierte XAML-Attributsyntaxformular ändert die typische MSIL/CLR-Syntaxkonvention, in der spitze Klammern für Typen und Einschränkungen von Generika verwendet werden, und ersetzt stattdessen den Einschränkungscontainer durch Klammern. Ein Beispiel finden Sie unter x:TypeArguments-Direktive.
Generika und XAML 2009-Funktionen
Wenn Sie zum Abrufen von XAML-Typen für gemeinsame Sprachprimitiven XAML 2009 verwenden, anstatt CLR-Basistypen zuzuordnen, können Sie integrierte XAML 2009-Datentypen als Informationselemente in x:TypeArguments verwenden. Sie können z. B. Folgendes deklarieren (Präfixzuordnungen werden nicht dargestellt, x ist jedoch der XAML-Sprachnamespace in XAML 2009):
<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>
Generikaunterstützung in WPF und anderen v3.5-Frameworks
Zur Verwendung in XAML 2006 muss x:Class auch für das gleiche Element wie x:TypeArguments angegeben werden, wenn WPF ausdrücklich als Ziel festgelegt ist, und das Element muss das Stammelement in einem XAML-Dokument sein. Das Stammelement muss einem generischen Typ mit mindestens einem Typargument zugeordnet werden. Ein Beispiel hierfür ist PageFunction<T>.
Mögliche Problemumgehungen zur Unterstützung generischer Verwendungen sind z. B. das Definieren einer benutzerdefinierten Markuperweiterung, die generische Typen zurückgeben kann, oder das Bereitstellen einer Umbruchklassendefinition, die von einem generischen Typ abgeleitet wird, aber die generische Einschränkung in einer eigenen Klassendefinition vereinfacht.
In WPF und mit .NET Framework 4 als Zielversion können Sie XAML 2009-Funktionen mit x:TypeArguments verwenden, allerdings nur für Loose XAML (nicht markupkompiliertes 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.