Condividi tramite


Generics in XAML

I servizi XAML .NET implementati in System.Xaml forniscono supporto per l'uso di tipi CLR generici. Questo supporto include la specifica dei vincoli dei generics come argomento di tipo e l'applicazione del vincolo chiamando il metodo appropriato Add per i casi di raccolta generici. Questo argomento descrive gli aspetti dell'uso e del riferimento ai tipi generici in XAML.

x:TypeArguments

x:TypeArguments è una direttiva definita dal linguaggio XAML. Quando viene usato come membro di un tipo XAML supportato da un tipo generico, x:TypeArguments passa gli argomenti del tipo di vincolo del generico al costruttore di supporto. Per la sintassi di riferimento relativa all'uso dei servizi XAML .NET di , che include esempi di x:TypeArgumentssintassi, vedi direttiva x:TypeArguments.

Poiché x:TypeArguments accetta una stringa e include il supporto del convertitore di tipi, viene in genere dichiarato nell'utilizzo XAML come attributo.

Nel flusso del nodo XAML le informazioni dichiarate da x:TypeArguments possono essere ottenute da XamlType.TypeArguments in una StartObject posizione nel flusso del nodo. Il valore restituito di XamlType.TypeArguments è un elenco di XamlType valori. Determinare se un tipo XAML rappresenta un tipo generico può essere eseguito chiamando XamlType.IsGeneric.

Regole e convenzioni di sintassi per i generics in XAML

In XAML un tipo generico deve essere sempre rappresentato come generico vincolato. Un generico non vincolato non è mai presente nel sistema di tipi XAML o in un flusso di nodi XAML e non può essere rappresentato nel markup XAML. È possibile fare riferimento a un generico all'interno della sintassi dell'attributo XAML per i casi in cui si tratta di un vincolo di tipo annidato di un generico a cui viene fatto riferimento da x:TypeArgumentso nei casi in cui x:Type fornisce un riferimento al tipo CLR per un tipo generico. Il riferimento ai generics è supportato tramite la XamlTypeTypeConverter classe definita dai servizi XAML .NET.

Il modulo di sintassi degli attributi XAML abilitato da XamlTypeTypeConverter modifica la tipica convenzione di sintassi MSIL/CLR che usa parentesi angolari per tipi e vincoli di generics e sostituisce invece le parentesi per il contenitore di vincoli. Per un esempio, vedere direttiva x:TypeArguments.

Generics e funzionalità XAML 2009

Se usi XAML 2009 invece di eseguire il mapping dei tipi di base CLR per ottenere i tipi XAML per le primitive del linguaggio comune, puoi usare i tipi predefiniti XAML 2009 come elementi di informazioni in x:TypeArguments. Ad esempio, puoi dichiarare quanto segue (mapping dei prefissi non visualizzati, ma x è lo spazio dei nomi XAML del linguaggio XAML per XAML 2009):

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

Supporto di generics in WPF

Per l'utilizzo di XAML 2006 quando si specifica la destinazione WPF, x:Class deve essere fornito anche nello stesso elemento di x:TypeArgumentse tale elemento deve essere l'elemento radice in un documento XAML. L'elemento radice deve eseguire il mapping a un tipo generico con almeno un argomento di tipo. Un esempio è PageFunction<T>.

Le possibili soluzioni alternative per supportare gli utilizzi generici includono la definizione di un'estensione di markup personalizzata che può restituire tipi generici o fornire una definizione di classe di wrapping che deriva da un tipo generico, ma rende flat il vincolo generico nella propria definizione di classe.

In WPF puoi usare le funzionalità XAML 2009 insieme a x:TypeArguments, ma solo per XAML libero (XAML non compilato con markup). Il codice XAML compilato dal markup per WPF e il modulo BAML di XAML non supportano attualmente le parole chiave e le funzionalità di XAML 2009.

I flussi di lavoro personalizzati in Windows Workflow Foundation per .NET Framework 3.5 non supportano l'utilizzo xaml generico.

Vedi anche