Dela via


Generiska i XAML

.NET XAML-tjänster som implementeras i System.Xaml ger stöd för användning av generiska CLR-typer. Det här stödet omfattar att ange begränsningar för generiska objekt som ett typargument och framtvinga villkoret genom att anropa lämplig Add metod för generiska samlingsfall. Det här avsnittet beskriver aspekter av att använda och referera till generiska typer i XAML.

x:TypeArguments

x:TypeArguments är ett direktiv som definieras av XAML-språket. När den används som medlem av en XAML-typ som backas upp av en allmän typ, skickar x:TypeArguments begränsande typargument av den generiska typen till stödkonstruktorn. Referenssyntax som gäller för .NET XAML Services-användning av x:TypeArguments, som innehåller syntaxexempel, finns i x:TypeArguments Directive.

Eftersom x:TypeArguments tar en sträng och har typkonverterarens stöd deklareras den vanligtvis i XAML-användning som ett attribut.

I XAML-nodströmmen kan informationen som deklareras av x:TypeArguments hämtas från XamlType.TypeArguments på en StartObject position i nodströmmen. Returvärdet för XamlType.TypeArguments är en lista över XamlType värden. Bestämning av om en XAML-typ representerar en allmän typ kan göras genom att anropa XamlType.IsGeneric.

Regler och syntaxkonventioner för generiska läkemedel i XAML

I XAML måste en allmän typ alltid representeras som en begränsad allmän. Ett obehindrat generiskt objekt finns aldrig i XAML-typsystemet eller en XAML-nodström och kan inte representeras i XAML-markering. En generisk kan refereras inom XAML-attributsyntax för fall där det är en kapslad typbegränsning av en generisk som refereras av x:TypeArguments, eller för fall där x:Type tillhandahåller en CLR-typreferens för en generisk typ. Referens till generiska produkter stöds via den XamlTypeTypeConverter-klass som definieras av .NET XAML Services.

XAML-attributsyntaxformuläret som aktiveras av XamlTypeTypeConverter ändrar den typiska MSIL/CLR-syntaxkonventionen som använder vinkelparenteser för typer och begränsningar av generiska objekt, och ersätter i stället parenteser för begränsningscontainern. Ett exempel finns i x:TypeArguments Directive.

Generiska och XAML 2009-funktioner

Om du använder XAML 2009 i stället för att mappa CLR-bastyperna för att hämta XAML-typer för vanliga språkpri primitiver kan du använda inbyggda XAML 2009-typer som informationsobjekt i x:TypeArguments. Du kan till exempel deklarera följande (prefixmappningar visas inte, men x är XAML-XAML-namnområdet för XAML 2009):

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

Support för generiska program i WPF

För XAML 2006-användning när du specifikt riktar in dig på WPF måste x:Class också anges på samma element som x:TypeArguments, och det elementet måste vara rotelementet i ett XAML-dokument. Rotelementet måste mappas till en allmän typ med minst ett typargument. Ett exempel är PageFunction<T>.

Möjliga lösningar för att stödja generiska användningar är att definiera ett anpassat tillägg för markering som kan returnera generiska typer, eller att tillhandahålla en omslutningsklassdefinition som härleds från en allmän typ men förenklar den allmänna begränsningen i sin egen klassdefinition.

I WPF kan du använda XAML 2009-funktioner tillsammans med x:TypeArguments, men bara för lös XAML (XAML som inte är påläggskompilerad). Påläggskompilerade XAML för WPF och BAML-formen av XAML stöder för närvarande inte XAML 2009-nyckelord och -funktioner.

Anpassade arbetsflöden i Windows Workflow Foundation för .NET Framework 3.5 stöder inte allmän XAML-användning.

Se även