XAML e spazi vuoti

Informazioni sulle regole di elaborazione degli spazi vuoti usate da XAML.

Elaborazione degli spazi vuoti

Coerente con XML, gli spazi vuoti in XAML sono spazi, avanzamento riga e tabulazioni. Questi valori corrispondono rispettivamente ai valori Unicode 0020, 000A e 0009. Per impostazione predefinita, questa normalizzazione degli spazi vuoti si verifica quando un processore XAML rileva qualsiasi testo interno trovato tra gli elementi in un file XAML:

  • I caratteri di avanzamento riga inseriti tra i caratteri dell'Asia orientale vengono rimossi.
  • Tutti gli spazi vuoti (spazi, avanzamento riga, tabulazioni) vengono convertiti in spazi.
  • Tutti gli spazi consecutivi vengono eliminati e sostituiti da un unico spazio.
  • Uno spazio immediatamente successivo al tag di inizio viene eliminato.
  • Uno spazio immediatamente precedente al tag di fine viene eliminato.
  • I caratteri dell'Asia orientale vengono definiti come un set di caratteri compresi tra U+20000 a U+2FFFD e tra U+30000 a U+3FFFD. Questo sottoinsieme talvolta è denominato anche come ideogrammi CJK. Per ulteriori informazioni, vedere http://www.unicode.org.

L'"impostazione predefinita" corrisponde allo stato indicato dal valore predefinito dell'attributo XML:space .

Spazi vuoti nel testo interno e primitive di stringa

Le regole di normalizzazione precedenti si applicano al testo interno all'interno degli elementi XAML. Dopo la normalizzazione, un processore XAML converte qualsiasi testo interno in un tipo appropriato come questo:

  • Se il tipo della proprietà non è una raccolta, ma non è nemmeno un tipo Object, il processore XAML tenta di eseguire la conversione a quel tipo usando il convertitore dei tipi. Una conversione non riuscita genera un errore di analisi XAML.
  • Se il tipo della proprietà è una raccolta e il testo interno è contiguo, (non sono frapposti tag di elementi), il testo interno viene analizzato come una singola String. Se il tipo di raccolta non può accettare String, viene generato anche un errore del parser XAML.
  • Se il tipo della proprietà è Object, il testo interno viene analizzato come una singola String. Se sono presenti tag di elemento intermedi, viene generato un errore del parser XAML, perché il tipo Object implica un singolo oggetto (String o altrimenti).
  • Se il tipo della proprietà è una raccolta e il testo interno non è contiguo, la prima sottostringa viene convertita in una String e aggiunta come elemento della raccolta. Quindi l'elemento frapposto sarà aggiunto come elemento della raccolta e infine la sottostringa finale (se presente) verrà aggiunta alla raccolta come terzo elemento String.

Spazi vuoti e modelli di contenuto di testo

In pratica, la conservazione degli spazi vuoti riguarda solo un sottoinsieme di tutti i possibili modelli di contenuto. Tale sottoinsieme è composto dai modelli di contenuto che accettano un tipo String in qualche forma, una raccolta String dedicata, o una combinazione di String e di altri tipi in elenchi, raccolte o dizionari.

Anche per i modelli di contenuto che accettano le stringhe, il comportamento predefinito all'interno di tali modelli prevede che tutti gli spazi vuoti rimanenti non siano trattati come significativi.

Conservazione degli spazi vuoti

Diverse tecniche consentono di mantenere gli spazi vuoti nello XAML origine in modo che non siano soggetti alla normalizzazione degli spazi vuoti del processore XAML.

xml:space="preserve": specificare questo attributo al livello dell'elemento in cui deve essere mantenuto lo spazio vuoto. Si noti che questo mantiene tutti gli spazi vuoti, inclusi gli spazi che potrebbero essere aggiunti dagli editor di codice o dalle superfici di progettazione per allineare gli elementi di markup come annidamento visivamente intuitivo. Se il rendering di tali spazi dipende ancora una volta dal modello di contenuto per l'elemento contenitore. Non è consigliabile specificare xml:space="preserve" a livello radice, perché la maggior parte dei modelli a oggetti non considera spazi vuoti come un modo o un altro. Si consiglia piuttosto di impostare l'attributo specificamente al livello degli elementi che eseguono il rendering degli spazi vuoti all'interno delle stringhe o che costituiscono raccolte significative di spazi vuoti.

Entità e spazi unificatori: XAML supporta il posizionamento di qualsiasi entità all'interno di un modello di testo a oggetti. È possibile usare entità dedicate, ad esempio lo spazio non interrotto (nella codifica UTF-8). È anche possibile usare controlli rich text che supportano caratteri spazio unificatore. Prestare molta attenzione se si usano entità per simulare caratteristiche di layout, ad esempio i rientri, in quanto l'output di runtime delle entità varierà in base a un maggior numero di fattori rispetto a strutture di layout generiche, ad esempio l'utilizzo corretto di pannelli e margini.