XAML e spazi vuotiXAML and whitespace

Informazioni sulle regole di elaborazione degli spazi vuoti in XAML.Learn about the whitespace processing rules as used by XAML.

Elaborazione degli spazi vuotiWhitespace processing

Coerenti con XML, gli spazi vuoti in XAML sono spazi, avanzamento riga e tabulazione. Questi corrispondono rispettivamente ai valori Unicode 0020, 000A e 0009.Consistent with XML, whitespace characters in XAML are space, linefeed, and tab. These correspond to the Unicode values 0020, 000A, and 0009 respectively. Per impostazione predefinita, quando un processore XAML elabora il testo interno tra due elementi in un file XAML, viene eseguita la normalizzazione degli spazi vuoti seguente:By default this whitespace normalization occurs when a XAML processor encounters any inner text found between elements in a XAML file:

  • I caratteri di avanzamento riga inseriti tra i caratteri dell'Asia orientale vengono rimossi.Linefeed characters between East Asian characters are removed.
  • Tutti gli spazi vuoti (spazi, avanzamento riga, tabulazioni) vengono convertiti in spazi.All whitespace characters (space, linefeed, tab) are converted into spaces.
  • Tutti gli spazi consecutivi vengono eliminati e sostituiti da un unico spazio.All consecutive spaces are deleted and replaced by one space.
  • Uno spazio immediatamente successivo al tag di inizio viene eliminato.A space immediately following the start tag is deleted.
  • Uno spazio immediatamente precedente al tag di fine viene eliminato.A space immediately before the end tag is deleted.
  • I caratteri dell'Asia orientale sono definiti come un insieme di intervalli di caratteri Unicode compresi tra U+20000 e U+2FFFD e tra U+30000 e U+3FFFD.East Asian characters is defined as a set of Unicode character ranges U+20000 to U+2FFFD and U+30000 to U+3FFFD. Questo subset viene anche definito ideogrammi CJK.This subset is also sometimes referred to as CJK ideographs. Per altre informazioni, vedere http://www.unicode.org.For more information, see http://www.unicode.org.

L'"impostazione predefinita" corrisponde allo stato indicato dal valore predefinito dell'attributo XML:space ."Default" corresponds to the state denoted by the default value of the xml:space attribute.

Spazi vuoti nel testo interno e primitive di stringaWhitespace in inner text, and string primitives

Le regole di normalizzazione precedenti si applicano al testo interno presente negli elementi XAML.The above normalization rules apply to inner text within XAML elements. Dopo la normalizzazione, un processore XAML converte qualsiasi testo interno in un tipo appropriato in questo modo:After normalization, a XAML processor converts any inner text into an appropriate type like this:

  • Se il tipo della proprietà non è una raccolta, ma non è nemmeno un tipo Object, il processore XAML prova a eseguire la conversione a quel tipo usando il convertitore dei tipi.If the type of the property is not a collection, but is not directly an Object type, the XAML processor tries to convert to that type using its type converter. Una conversione non riuscita genera un errore di analisi XAML.A failed conversion here results in a XAML parse error.
  • Se il tipo della proprietà è una raccolta e il testo interno è contiguo (non sono frapposti tag di elementi), il testo interno viene analizzato come singolo oggetto String.If the type of the property is a collection, and the inner text is contiguous (no intervening element tags), the inner text is parsed as a single String. Se il tipo di raccolta non accetta String, anche in questo caso viene generato un errore del parser XAML.If the collection type cannot accept String, this also results in a XAML parser error.
  • Se il tipo della proprietà è Object, il testo interno viene analizzato come singolo oggetto String.If the type of the property is Object, then the inner text is parsed as a single String. Se sono frapposti tag di elementi, viene generato un errore del parser XAML, perché il tipo Object implica un singolo oggetto (String o diverso).If there are intervening element tags, this results in a XAML parser error, because the Object type implies a single object (String or otherwise).
  • Se il tipo della proprietà è una raccolta e il testo interno non è contiguo, la prima sottostringa viene convertita in un oggetto String e aggiunta come elemento della raccolta. Quindi l'elemento frapposto viene aggiunto come elemento della raccolta e la sottostringa finale (se presente) viene aggiunta alla raccolta come terzo elemento String.If the type of the property is a collection, and the inner text is not contiguous, then the first substring is converted into a String and added as a collection item, the intervening element is added as a collection item, and finally the trailing substring (if any) is added to the collection as a third String item.

Spazi vuoti e modelli di contenuto del testoWhitespace and text content models

In pratica, il mantenimento degli spazi vuoti riguarda solo un sottoinsieme di tutti i possibili modelli di contenuto.In practice, preserving whitespace is of concern only for a subset of all possible content models. Questo sottoinsieme è composto da modelli di contenuto che accettano in qualche modo un tipo String singleton, una raccolta String dedicata o una combinazione di String e altri tipi in elenchi, raccolte o dizionari.That subset is composed of content models that can take a singleton String type in some form, a dedicated String collection, or a mixture of String and other types in lists, collections, or dictionaries.

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.Even for content models that can take strings, the default behavior within these content models is that any whitespace that remains is not treated as significant.

Conservazione degli spazi vuotiPreserving whitespace

Ci sono diverse tecniche per la conservazione degli spazi vuoti nel codice XAML di origine per l'eventuale presentazione che non sono interessate dalla normalizzazione degli spazi vuoti del processore XAML.Several techniques for preserving whitespace in the source XAML for eventual presentation are not affected by XAML processor whitespace normalization.

xml:space="preserve": specifica questo attributo al livello dell'elemento in cui è necessario mantenere gli spazi vuoti.xml:space="preserve": Specify this attribute at the level of the element where whitespace needs to be preserved. Nota che questa operazione comporta la conservazione di tutti gli spazi vuoti, inclusi gli spazi che possono essere aggiunti da editor di codice o aree di progettazione per l'allineamento degli elementi di markup come annidamento intuitivo a livello visivo.Note that this preserves all whitespace, including the spaces that might be added by code editors or design surfaces to align markup elements as a visually intuitive nesting. L'eventuale rendering di tali spazi dipende dal modello di contenuto per l'elemento contenitore.Whether those spaces render is again a matter of the content model for the containing element. Ti consigliamo di non specificare xml:space="preserve" al livello della radice perché la maggior parte dei modelli di oggetti, in un modo o nell'altro non tiene conto degli spazi vuoti.We don't recommend that you specify xml:space="preserve" at the root level, because the majority of object models don't consider whitespace as significant one way or another. 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.It is a better practice to only set the attribute specifically at the level of elements that render whitespace within strings, or are whitespace significant collections.

Entità e spazi unificatori: XAML supporta il posizionamento di qualsiasi entità Unicode all'interno di un modello a oggetti di testo.Entities and nonbreaking spaces: XAML supports placing any Unicode entity within a text object model. Puoi usare entità dedicate come spazi unificatori (nella codifica UTF-8).You can use dedicated entities such as nonbreaking space (in UTF-8 encoding). È anche possibile usare controlli rich text che supportano caratteri spazio unificatore.You can also use rich text controls that support nonbreaking space characters. Presta attenzione se usi entità che simulano caratteristiche di layout come i rientri, perché in fase di esecuzione l'output delle entità varia in base a un numero di fattori maggiore rispetto alle funzionalità generali del layout, ad esempio l'uso corretto di pannelli e margini.Be cautious if you are using entities to simulate layout characteristics such as indents, because the run-time output of the entities vary based on a greater number of factors than would the general layout facilities, such as proper use of panels and margins.