Estensione di markup x:Type
Fornisce l'oggetto CLR Type che è il tipo sottostante per un tipo XAML specificato.
Utilizzo degli attributi XAML
<object property="{x:Type prefix:typeNameValue}" .../>
Utilizzo dell'elemento oggetto XAML
<x:Type TypeName="prefix:typeNameValue"/>
Valori XAML
Valore | Descrizione |
---|---|
prefix |
Opzionale. 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 viene fornito prefix . |
Osservazioni
L'estensione di markup x:Type
ha una funzione simile all'operatore typeof()
in C# o all'operatore GetType
in Microsoft Visual Basic.
L'estensione di markup x:Type
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 la Type CLR di output consiste nel fatto che l'output Type è il UnderlyingType dell'input XamlType, dopo aver esaminato le XamlType necessarie in base al contesto dello schema XAML e al servizio IXamlTypeResolver fornito dal contesto.
Nei servizi XAML .NET la gestione per questa estensione di markup è definita dalla classe TypeExtension.
In implementazioni del framework specifiche, 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 degli attributi è la sintassi più comune usata con questa estensione di markup. Token stringa fornito dopo l'assegnazione della stringa di identificatore x:Type
come valore TypeName della classe di 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 oppure contiene che Name preceduto da un prefisso per un mapping dello spazio dei nomi XAML non predefinito.
L'estensione di markup x:Type
può essere usata nella sintassi degli elementi oggetto. In questo caso, è necessario specificare il valore della proprietà TypeName per inizializzare correttamente l'estensione.
L'estensione di markup x:Type
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, vedere 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 utilizzo dell'estensione di markup x:Type
. È invece possibile specificare il valore come stringa che denomina il tipo. Esempi di questo esempio 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}
nel supporto del linguaggio XAML e non accetta utilizzi {x:Type}
al di fuori di alcune circostanze destinate a supportare WPF-Silverlight migrazione XAML. Di conseguenza, il comportamento typename-as-string è incorporato in tutte le valutazioni di proprietà native di Silverlight in cui un 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 possono trovarsi su elementi diversi dalla radice. Per altre informazioni, vedere la sezione "XAML 2009" di direttiva x:TypeArguments.XAML 2009 supporta una sintassi per specificare il vincolo di un tipo generico nel markup. Questa operazione può essere usata da
x:TypeArguments
, dax:Type
o 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). XAML compilato con markup per WPF e il formato BAML di XAML attualmente non supportano le parole chiave e le funzionalità XAML 2009.
Vedere anche
- Style
- stili e modelli
(WPF .NET) - panoramica XAML (WPF .NET)
- estensioni di markup e XAML WPF
.NET Desktop feedback