Condividi tramite


Estensione del markup x:Type

Fornisce l'oggetto CLR Type che è il tipo sottostante per un tipo XAML specificato.

Uso della sintassi XAML per gli attributi

<object property="{x:Type prefix:typeNameValue}" .../>

Utilizzo della sintassi XAML per gli elementi oggetto

<x:Type TypeName="prefix:typeNameValue"/>

Valori XAML

Valore Descrizione
prefix (Facoltativo). Prefisso che esegue il mapping di uno spazio dei nomi XAML non predefinito. Non è spesso necessario specificare un prefisso. Vedere la sezione Osservazioni.
typeNameValue Obbligatorio. Un nome di tipo risolvibile nello spazio dei nomi XAML predefinito corrente; o il prefisso mappato specificato, se prefix specificato.

Osservazioni

L'estensione x:Type di markup ha una funzione simile all'operatore typeof() in C# o all'operatore GetType in Microsoft Visual Basic.

L'estensione x:Type di markup fornisce un comportamento di conversione da stringa per le proprietà che accettano il tipo Type. L'input è un tipo XAML. La relazione tra il tipo XAML di input e CLR Type di output è che l'output Type è quello UnderlyingType dell'input XamlType, dopo aver cercato il necessario XamlType in base al contesto dello schema XAML e al servizio fornito dal IXamlTypeResolver contesto.

Nei servizi XAML .NET la gestione per questa estensione di markup è definita dalla TypeExtension classe .

Nelle implementazioni specifiche del framework, alcune proprietà che accettano Type come valore possono accettare direttamente il nome del tipo (il valore stringa del tipo Name). Tuttavia, l'implementazione di questo comportamento è uno scenario complesso. Per esempi, vedere la sezione "Note sull'utilizzo di WPF" riportata di seguito.

La sintassi per gli attributi è quella più comunemente utilizzata con questa estensione di markup. Il token di stringa fornito dopo la stringa dell'identificatore x:Type viene assegnato come valore TypeName della classe dell'estensione TypeExtension sottostante. Nel contesto dello schema XAML predefinito per i servizi XAML .NET, basato sui tipi CLR, il valore di questo attributo è il Name del tipo desiderato o contiene che Name precede un prefisso per un mapping dello spazio dei nomi XAML non predefinito.

L'estensione x:Type di markup può essere usata nella sintassi degli elementi oggetto. In questo caso, è necessario specificare il valore della TypeName proprietà per inizializzare correttamente l'estensione.

L'estensione x:Type di markup può essere usata anche come attributo dettagliato; tuttavia, questo uso non è tipico: <object property="{x:Type TypeName=typeNameValue}" .../>

Note sull'utilizzo di WPF

Spazio dei nomi XAML predefinito e mapping dei tipi

Lo spazio dei nomi XAML predefinito per la programmazione WPF contiene la maggior parte dei tipi XAML necessari per scenari XAML tipici; pertanto, è spesso possibile evitare prefissi quando si fa riferimento a valori di tipo XAML. Potrebbe essere necessario eseguire il mapping di un prefisso se si fa riferimento a un tipo da un assembly personalizzato o ai tipi esistenti in un assembly WPF, ma che provengono da uno spazio dei nomi CLR non mappato allo spazio dei nomi XAML predefinito. Per altre informazioni sui prefissi, sugli spazi dei nomi XAML e sul mapping degli spazi dei nomi CLR, vedi Spazi dei nomi XAML e Mapping dello spazio dei nomi per XAML WPF.

Proprietà di tipo che supportano Typename-as-String

WPF supporta tecniche che consentono di specificare il valore di alcune proprietà di tipo Type senza richiedere un x:Type utilizzo dell'estensione di markup. È invece possibile specificare il valore come stringa che denomina il tipo. Esempi di questo sono ControlTemplate.TargetType e Style.TargetType. Il supporto per questo comportamento non viene fornito tramite convertitori di tipi o estensioni di markup. Si tratta invece di un comportamento di rinvio implementato tramite FrameworkElementFactory.

Silverlight supporta una convenzione simile. Silverlight attualmente non supporta {x:Type} il supporto del linguaggio XAML e non accetta {x:Type} utilizzi al di fuori di alcune circostanze destinati a supportare la migrazione XAML wpf-Silverlight. Di conseguenza, il comportamento typename-as-string è incorporato in tutte le valutazioni di proprietà native di Silverlight in cui è Type il valore .

XAML 2009

XAML 2009 offre supporto aggiuntivo per i tipi generici e modifica il comportamento delle funzionalità di x:TypeArguments e x:Type per fornire questo supporto.

  • x:TypeArguments e l'elemento oggetto associato per un'istanza di un oggetto generico può essere su elementi diversi dalla radice. Per altre informazioni, vedi la sezione "XAML 2009" della direttiva x:TypeArguments.

  • XAML 2009 supporta una sintassi per specificare il vincolo di un tipo generico nel markup. Può essere usato da x:TypeArguments, da x:Typeo dalle due funzionalità in combinazione.

  • L'implementazione XAML WPF durante l'elaborazione di XAML 2009 per il caricamento aggiunge anche questa funzionalità al comportamento di conversione implicita dei tipi per determinate proprietà del framework che usano il tipo Type.

In WPF puoi usare le funzionalità XAML 2009, ma solo per XAML libero (XAML non compilato da 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.

Vedi anche