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 Add appropriato 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 di tipo con vincolo dell'oggetto generico al costruttore di supporto. Per la sintassi di riferimento relativa all'uso dei servizi XAML .NET di x:TypeArguments, che include esempi di sintassi, vedere 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 posizione StartObject nel flusso del nodo. Il valore restituito di XamlType.TypeArguments è un elenco di valori XamlType. 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 fa riferimento 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 classe XamlTypeTypeConverter 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 tipi PREDEFINITI XAML 2009 come elementi di informazioni in x:TypeArguments. Ad esempio, puoi dichiarare quanto segue (mapping di prefisso 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 sullo 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 è possibile usare le funzionalità XAML 2009 insieme a x:TypeArguments, ma solo per XAML libero (XAML non compilato dal markup). XAML compilato con markup per WPF e il formato BAML di XAML attualmente non supportano le parole chiave e le funzionalità XAML 2009.

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

Vedere anche