XAML e espaço em branco

Saiba mais sobre as regras de processamento de espaço em branco usadas pelo XAML.

Processamento de espaços em branco

Consistente com XML, os caracteres de espaço em branco em XAML são espaço, avanço de linha e tabulação. Eles correspondem aos valores Unicode 0020, 000A e 0009, respectivamente. Por padrão, essa normalização de espaço em branco ocorre quando um processador XAML encontra qualquer texto interno encontrado entre elementos em um arquivo XAML:

  • Os caracteres de avanço de linha entre caracteres do Leste Asiático são removidos.
  • Todos os caracteres de espaço em branco (espaço, alimentação de linha, tabulação) são convertidos em espaços.
  • Todos os espaços consecutivos são excluídos e substituídos por um espaço.
  • Um espaço imediatamente após a tag start é excluído.
  • Um espaço imediatamente antes da tag final é excluído.
  • Os caracteres do Leste Asiático são definidos como um conjunto de intervalos de caracteres Unicode U+20000 a U+2FFFD e U+30000 a U+3FFFD. Este subconjunto também é às vezes chamado de ideogramas CJK. Para obter mais informações, consulte http://www.unicode.org.

"Padrão" corresponde ao estado indicado pelo valor padrão do atributo xml:space .

Espaço em branco no texto interno e primitivas de cadeia de caracteres

As regras de normalização acima se aplicam ao texto interno dentro de elementos XAML. Após a normalização, um processador XAML converte qualquer texto interno em um tipo apropriado como este:

  • Se o tipo da propriedade não for uma coleção, mas não for diretamente um tipo Object , o processador XAML tentará converter para esse tipo usando seu conversor de tipo. Uma conversão com falha aqui resulta em um erro de análise XAML.
  • Se o tipo da propriedade for uma coleção e o texto interno for contíguo (sem marcas de elemento intervenientes), o texto interno será analisado como uma única String. Se o tipo de coleção não puder aceitar String, isso também resultará em um erro do analisador XAML.
  • Se o tipo da propriedade for Object, o texto interno será analisado como uma única String. Se houver marcas de elemento intermediárias, isso resultará em um erro de analisador XAML, pois o tipo Object implica um único objeto (String ou outro).
  • Se o tipo da propriedade for uma coleção e o texto interno não for contíguo, a primeira subcadeia de caracteres será convertida em uma String e adicionada como um item de coleção, o elemento intermediário será adicionado como um item de coleção e, por fim, a subcadeia de caracteres à direita (se houver) será adicionada à coleção como um terceiro item de String .

Modelos de conteúdo de texto e espaço em branco

Na prática, preservar o espaço em branco é motivo de preocupação apenas para um subconjunto de todos os modelos de conteúdo possíveis. Esse subconjunto é composto por modelos de conteúdo que podem usar um tipo String singleton de alguma forma, uma coleção String dedicada ou uma mistura de String e outros tipos em listas, coleções ou dicionários.

Mesmo para modelos de conteúdo que podem usar cadeias de caracteres, o comportamento padrão nesses modelos de conteúdo é que qualquer espaço em branco restante não seja tratado como significativo.

Preservando espaços em branco

Várias técnicas para preservar o espaço em branco no XAML de origem para apresentação eventual não são afetadas pela normalização do espaço em branco do processador XAML.

xml:space="preserve": Especifique esse atributo no nível do elemento em que o espaço em branco precisa ser preservado. Observe que isso preserva todos os espaços em branco, incluindo os espaços que podem ser adicionados por editores de código ou superfícies de design para alinhar elementos de marcação como um aninhamento visualmente intuitivo. Se esses espaços são renderizados é novamente uma questão do modelo de conteúdo para o elemento que o contém. Não recomendamos que você especifique xml:space="preserve" no nível raiz, pois a maioria dos modelos de objeto não considera o espaço em branco como significativo de uma forma ou de outra. É uma prática recomendada definir o atributo apenas especificamente no nível de elementos que renderizam espaços em branco dentro de cadeias de caracteres ou são coleções significativas de espaços em branco.

Entidades e espaços não separáveis: o XAML dá suporte à colocação de qualquer entidade Unicode em um modelo de objeto de texto. Você pode usar entidades dedicadas, como espaço não separável (na codificação UTF-8). Você também pode usar controles de rich text que dão suporte a caracteres de espaço não separáveis. Tenha cuidado se você estiver usando entidades para simular características de layout, como recuos, pois a saída em tempo de execução das entidades varia com base em um número maior de fatores do que os recursos gerais de layout, como o uso adequado de painéis e margens.