Processamento de Espaço em branco em XAML
Extensible Application Markup Language (XAML) tem regras da linguagem que definem o quão significativamente os espaços em brancos devem ser processados por uma implementação do processador do XAML. Este tópico documenta essas regras da linguagem, bem como tratamento adicionais de espaço em branco definido pela implementação Windows Presentation Foundation (WPF) do processador de XAML e o gravador de XAML para serialização.
Processamento de espaço em branco
Definição de espaço em branco
Consistente com XML, caracteres de espaço em branco em XAML são espaço, alimentação de linha e tab. Esses correspondem aos valores Unicode de 0020, 000A, e 0009 respectivamente.
Normalização de Espaço em Branco
Por padrão a normalização de espaço em branco a seguir ocorre quando um processador de XAML processa um arquivo de XAML:
Caracteres de nova linha entre caracteres do Leste Asiático são removidos. Consulte a seção de caracteres do Leste Asiático mais para baixo neste tópico para obter uma definição de "caracteres do Leste Asiático".
Todos os caracteres de espaço em branco (espaço, alimentação de linha, guia) 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 marca de início é excluído.
Um espaço imediatamente antes de marca de fim é excluído.
"Default" corresponde ao estado denotado pelo valor padrão dasXML: espaço atributo.
Espaço em branco no texto interno e String Primitivas
As regras de normalização acima se aplicam a textos internos encontrados dentro de elementos de XAML . Após a normalização, um processador de XAML converterá qualquer texto interno em um tipo apropriado da seguinte maneira:
Se o tipo da propriedade não é uma coleção, mas não diretamente for um tipo Object, o processador de XAML tenta converter para aquele tipo utilizando o conversor de tipos. Uma falha de conversão aqui resultará em um erro em tempo de compilação.
Se o tipo de propriedade é uma coleção, e o texto interno for contíguo (não elementos de marcas intervenientes), o elemento de texto interno é analisado como uma única String. Se o tipo de coleção não pode aceitar String, isso também resulta em um erro em tempo de compilação.
Se o tipo da propriedade for Object, em seguida, o texto interno é analisado como uma única String. Se existirem marcas de elemento intervenientes, isso resulta em um erro em tempo de compilação, porque o tipo Object implica um único objeto (String ou não).
Se o tipo de propriedade é uma coleção, e o texto interno não é contíguo, em seguida, a primeira substring é convertida em um String e adicionada como um item de coleção , o elemento intermediárias é adicionado como um item de coleção, e finalmente a substring à direita (se houver) é adicionada à coleção como um item String terceiro.
Espaço em branco e Modelos de Conteúdo de texto
Na prática, preservar espaço em branco é apenas uma preocupação para um subconjunto de todos os modelos de conteúdo possíveis. Esse subconjunto é composto de modelos que podem receber um tipo String singleton de alguma forma, uma coleção String dedicada, ou uma mistura de String e outros tipos em uma coleção de IList ou ICollection<T> .
Mesmo para modelos de conteúdo que pode receber sequências de caracteres, o comportamento padrão dentro desses modelos de conteúdo é que qualquer espaço em branco que permanece não é tratado como significativo. Por exemplo, ListBox recebe um IList, mas o espaço em branco (tais como alimentação de linha entre cada ListBoxItem) é não preservado e não é renderizado, tentar usar alimentações de linha como separadores entre sequências de caracteres para itens de ListBoxItem na verdade não funciona de maneira alguma; as sequências de caracteres separadas pela alimentação de linha são tratadas como uma sequência e um item.
As coleções que tratam espaço em branco como significativas normalmente fazem parte do modelo do documento de fluxo. A coleção principal que oferece suporte ao comportamento preservação de espaço em branco é InlineCollection. Essa classe de coleção é declarado com o WhitespaceSignificantCollectionAttribute; quando esse atributo é encontrado, o processador de XAML tratará espaços em branco dentro da coleção como significativo. A combinação de xml:space="preserve" e espaços em branco em uma coleção denotada por WhitespaceSignificantCollectionAttribute é que todos os espaços em branco são preservado e renderizados. A combinação de xml:space="default" e espaços em branco em um WhitespaceSignificantCollectionAttribute irão resultar na normalização inicial de espaço em branco descrita anteriormente, que deixará um espaço em branco em determinadas posições, e esses espaços em brancos são preservadas e renderizados. O comportamento é desejável é por sua conta, e você deve usar xml:space seletivamente para ativar o comportamento que você deseja.
Além disso, determinados elementos em linha que conote uma quebra de linha em um modelo de documento de fluxo devem deliberadamente não apresentar um espaço extra mesmo em uma coleção onde espaço em branco são significativos. Por exemplo, o elemento LineBreak tem a mesma finalidade que a marca <br/> no HTML, e para facilitar a leitura na marcação normalmente um LineBreak é separado de qualquer texto subsequente por uma alimentação de linha. Essa alimentação de linha não deve ser normalizada para se tornar um espaço à esquerda na linha subsequente. Para ativar esse comportamento, a definição de classe para o elemento LineBreak aplica-se a TrimSurroundingWhitespaceAttribute, que depois é interpretado pelo processador de XAML para significar que o espaço em branco ao redor de LineBreak sempre é cortado.
Preservar espaço em branco
Há várias técnicas para preservar espaço em branco na fonte de XAML para eventual apresentação que não são afetados por normalização de espaço em branco do processador de XAML.
XML: espaço = "preservar": Especifique esse atributo no nível do elemento onde preservação de espaço em branco é desejada. Observe que isso irá preservar todos os espaços em branco, incluindo os espaços que podem ser adicionados por aplicativos de edição para "impressão bonita" alinhar elementos como um aninhamento visualmente intuitivo, mas se esses espaços são renderizados é novamente uma questão do modelo de conteúdo para o elemento que o contém. Especificar xml:space="preserve" no nível da raiz não é recomendável, pois a maioria dos modelos de objeto não considera o espaço em branco de uma maneira significativa ou outra. Ele é uma prática melhor somente definir o atributo especificamente no nível de elementos que renderiza espaço em branco em sequências de caracteres, ou são coleções onde espaço em branco são significativos.
Entidades e espaços não separáveis: XAML oferece suporte para colocar qualquer Unicode entidade em um modelo de objeto de texto. Você pode usar entidades dedicadas, como espaço que não são de quebra(  em codificação UTF-8). Você também pode usar controles de textos ricos que suportam caracteres de espaço que não são de quebra. Você deve ter cuidado se você estiver usando as entidades para simular características de layout, como identação, porque a saída em tempo de execução das entidades irá variar com base em um número maior de fatores do que seria as instalações gerais de layout, como o uso adequado de painéis e margens. Por exemplo, as entidades são mapeadas para as fontes e podem alterar o tamanho em resposta a seleção da fonte do usuário.
Caracteres do Leste Asiático
"Caracteres do Leste Asiático" são definidos como um conjunto de intervalos de caractere Unicode de U+20000 até U+2FFFD e de U+30000 até U+3FFFD. Esse subconjunto às vezes também é conhecido como "Ideogramas CJK". Para obter mais informações, consulte http://www.Unicode.org.