Condividi tramite


Direttiva x:TypeArguments

Passa gli argomenti di tipo con vincolo di un generico al costruttore del tipo generico.

Utilizzo degli attributi XAML

<object x:TypeArguments="typeString" .../>

Valori XAML

Valore Descrizione
object Dichiarazione dell'elemento oggetto di un tipo XAML, supportato da un tipo generico CLR. Se object fa riferimento a un tipo XAML che non proviene dallo spazio dei nomi XAML predefinito, object richiede un prefisso per indicare lo spazio dei nomi XAML in cui esiste object.
typeString Stringa che dichiara uno o più nomi di tipo XAML come stringhe, che fornisce gli argomenti di tipo per il tipo generico CLR. Per altre note sulla sintassi, vedere Note sulla sintassi.

Osservazioni

Nella maggior parte dei casi, i tipi XAML usati come elemento di informazioni in una stringa typeString sono preceduti da un prefisso. I tipi tipici di vincoli generici CLR (ad esempio, Int32 e String) provengono da librerie di classi di base CLR. Tali librerie non vengono mappate a tipici spazi dei nomi XAML predefiniti specifici del framework e pertanto richiedono un mapping del prefisso per l'utilizzo di XAML.

Puoi specificare più di un nome di tipo XAML usando un delimitatore da virgole.

Se i vincoli generici usano tipi generici, gli argomenti del tipo di vincolo annidato possono essere contenuti tra parentesi ().

Si noti che questa definizione di x:TypeArguments è specifica per i servizi XAML .NET e l'uso del backup CLR. Una definizione a livello di linguaggio è disponibile in [MS-XAML] Sezione 7.3.11.

Esempi di utilizzo

Per questi esempi, si supponga che le definizioni dello spazio dei nomi XAML seguenti siano dichiarate:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"

Elencare> stringhe di<

<scg:List x:TypeArguments="sys:String" ...> crea un'istanza di un nuovo List<T> con un argomento di tipo String.

Dictionary<String,String>

<scg:Dictionary x:TypeArguments="sys:String,sys:String" ...> crea un'istanza di un nuovo Dictionary<TKey,TValue> con due argomenti di tipo String.

Queue<KeyValuePair<String,String>>

<scg:Queue x:TypeArguments="scg:KeyValuePair(sys:String,sys:String)" ...> crea un'istanza di un nuovo Queue<T> con un vincolo di KeyValuePair<TKey,TValue> con gli argomenti del tipo di vincolo interno String e String.

Utilizzo XAML 2006 e XAML generico WPF

Per l'utilizzo di XAML 2006 e XAML usato per le applicazioni WPF, esistono le restrizioni seguenti per x:TypeArguments e gli utilizzi di tipi generici da XAML in generale:

  • Solo l'elemento radice di un file XAML può supportare un utilizzo XAML generico che fa riferimento a un tipo generico.

  • L'elemento radice deve eseguire il mapping a un tipo generico con almeno un argomento di tipo. Un esempio è PageFunction<T>. Le funzioni di pagina sono lo scenario principale per il supporto dell'utilizzo generico XAML in WPF.

  • L'elemento dell'oggetto XAML dell'elemento radice per il generico deve anche dichiarare una classe parziale usando x:Class. Questo vale anche se si definisce un'azione di compilazione WPF.

  • x:TypeArguments non può fare riferimento a vincoli generici annidati.

XAML 2009 o XAML 2006 senza dipendenze WPF 3.0 o WPF 3.5

In Servizi XAML .NET per XAML 2006 o XAML 2009, le restrizioni correlate a WPF sull'utilizzo XAML generico sono disattivate. È possibile creare un'istanza di un elemento oggetto generico in qualsiasi posizione nel markup XAML supportato dal sistema del tipo di supporto e dal modello a oggetti.

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 per primitive del linguaggio XAML comuni come elementi di informazioni in un typeString. 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"/>

In WPF e quando la destinazione è .NET Framework 4 o .NET Core 3.0 (o versione successiva), è 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. Se devi compilare il codice XAML, devi operare in base alle restrizioni indicate nella sezione XAML 2006 e utilizzo XAML generico WPF. BAML è supportato solo in .NET Framework.

Vedere anche