Condividi tramite


Estensione di markup x:Array

Fornisce supporto generale per matrici di oggetti in XAML tramite un'estensione di markup. Corrisponde al tipo XAML x:ArrayExtension in [MS-XAML].

Utilizzo dell'elemento oggetto XAML

<x:Array Type="typeName">
  arrayContents
</x:Array>

Valori XAML

Valore Descrizione
typeName Nome del tipo che il x:Array conterrà. typeName può essere (e spesso è) preceduto da un prefisso per uno spazio dei nomi XAML che contiene le definizioni dei tipi XAML.
arrayContents Contenuto degli elementi assegnato alla proprietà intrinseca ArrayExtension.Items. In genere, questi elementi vengono specificati come uno o più elementi oggetto contenuti all'interno del x:Array tag di apertura e chiusura. È previsto che gli oggetti specificati qui siano assegnabili al tipo XAML specificato in typeName.

Osservazioni

Type è un attributo obbligatorio per tutti gli elementi oggetto x:Array. Un valore del parametro Type non deve usare un'estensione di markup x:Type; il nome breve del tipo è un tipo XAML, che può essere specificato come stringa.

Nell'implementazione dei servizi XAML .NET la relazione tra il tipo XAML di input e l'output CLR Type della matrice creata è influenzata dal contesto del servizio per le estensioni di markup. L'output Type è il UnderlyingType del tipo XAML di input, dopo aver cercato il XamlType necessario in base al contesto dello schema XAML e al servizio IXamlTypeResolver fornito dal contesto.

Durante l'elaborazione, il contenuto della matrice viene assegnato alla proprietà intrinseca ArrayExtension.Items. Nell'implementazione di ArrayExtension questo oggetto è rappresentato da ArrayExtension.Items.

Nell'implementazione dei servizi XAML .NET la gestione per questa estensione di markup è definita dalla classe ArrayExtension. ArrayExtension non è sealed e può essere usato come base per un'implementazione dell'estensione di markup per un tipo di matrice personalizzato.

x:Array è più destinato all'estendibilità generale del linguaggio in XAML. Tuttavia, x:Array può essere utile anche per specificare i valori XAML di determinate proprietà che accettano raccolte supportate da XAML come contenuto delle proprietà strutturate. Ad esempio, è possibile specificare il contenuto di una proprietà IEnumerable con un utilizzo x:Array.

x:Array è un'estensione di markup. Le estensioni di markup vengono in genere implementate quando è necessario che i valori degli attributi di escape siano diversi dai valori letterali o dai nomi dei gestori e il requisito è più globale rispetto all'inserimento di convertitori di tipi su determinati tipi o proprietà. x:Array è parzialmente un'eccezione a tale regola perché invece di fornire una gestione alternativa del valore dell'attributo, x:Array fornisce una gestione alternativa del relativo contenuto di testo interno. Questo comportamento consente di raggruppare i tipi che potrebbero non essere supportati da un modello di contenuto esistente in una matrice e farvi riferimento più avanti nel code-behind accedendo alla matrice denominata; è possibile chiamare Array metodi per ottenere singoli elementi della matrice.

Tutte le estensioni di markup in XAML usano le parentesi graffe ({,}) nella sintassi degli attributi, ovvero la convenzione in base alla quale un processore XAML riconosce che un'estensione di markup deve elaborare il valore dell'attributo. Per altre informazioni sulle estensioni di markup in generale, vedere Convertitori di tipi ed estensioni di markup per XAML.

In XAML 2009 x:Array è definito come primitiva del linguaggio anziché come estensione di markup. Per altre informazioni, vedere tipi predefiniti per primitive del linguaggio XAML comuni.

Note sull'utilizzo di WPF

In genere, gli elementi oggetto che popolano un x:Array non sono elementi presenti nello spazio dei nomi XAML WPF e richiedono un mapping di prefisso a uno spazio dei nomi XAML non predefinito.

Ad esempio, di seguito è riportata una semplice matrice di due stringhe, con il prefisso sys (e anche x) definito al livello della matrice.

<x:Array Type="sys:String"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <sys:String>Hello</sys:String>
  <sys:String>World</sys:String>
</x:Array>

Per i tipi personalizzati usati come elementi di matrice, la classe deve supportare anche i requisiti per la creazione di istanze in XAML come elementi oggetto. Per altre informazioni, vedere xaml e classi personalizzate per WPF.

Vedere anche