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:TypeArguments
o 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:TypeArguments
e 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
.NET Desktop feedback