Compartilhar via


Processamento de Espaço em branco em XAML

As regras de linguagem XAML estado desse espaço em branco significativo deve ser processado por um XAML implementação do processador. Este tópico documenta essas regras de linguagem XAML. Ele também documenta o tratamento de espaço em branco adicional é definido pelo Windows Presentation Foundation (WPF) a implementação do processador XAML e o gravador de XAML para serialização.

Este tópico contém as seguintes seções.

  • Whitespace Definition
  • Whitespace Normalization
  • Whitespace in Inner Text, and String Primitives
  • Preserving Whitespace
  • East Asian Characters
  • Whitespace and Text Content Models
  • Tópicos relacionados

Whitespace Definition

Consistent with XML, whitespace characters in XAML are space, linefeed, and tab. These correspond to the Unicode values 0020, 000A, and 0009 respectively.

Whitespace Normalization

Por padrão a normalização de espaço em branco a seguir ocorre quando um XAML processos de processador um XAML arquivo:

  1. Linefeed characters between East Asian characters are removed. Consulte "Caracteres do Leste Asiático" seção mais adiante neste tópico para obter uma definição do termo.

  2. All whitespace characters (space, linefeed, tab) are converted into spaces.

  3. All consecutive spaces are deleted and replaced by one space.

  4. A space immediately following the start tag is deleted.

  5. A space immediately before the end tag is deleted.

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

Whitespace in Inner Text, and String Primitives

As regras de normalização anteriores aplicam-se texto interno que for encontrado dentro de elementos XAML. Após a normalização, um processador XAML converte qualquer texto interno um tipo apropriado da seguinte maneira:

  • Se o tipo da propriedade não é uma coleção, mas não é diretamente uma Object tipo, o processador XAML tenta converter em tipo, usando o conversor de tipo. Uma falha na conversão aqui faz com que um erro de tempo de compilação.

  • Se o tipo da propriedade é uma coleção e o texto interno é contíguo (nenhum intermediárias elemento tags), o texto interno é analisado como um único String. Se o tipo de coleção não pode aceitar String, isso também causa um erro de tempo de compilação.

  • Se o tipo da propriedade for Object, o texto interno é analisado como um único String. Se há são interveniente marcas de elemento, isso causará um erro de tempo de compilação, porque o Object tipo implica um único objeto (String ou de outra forma).

  • Se o tipo da propriedade é uma coleção e o texto interno não é contíguo, da primeira substring é convertida em um String e adicionado como um item da coleção, o elemento interveniente é adicionado como um item da coleção, e finalmente a subseqüência de caracteres à direita (se houver) é adicionada à coleção como uma terceira String item.

Preserving Whitespace

There are several techniques for preserving whitespace in the source XAML for eventual presentation that are not affected by XAML processor whitespace normalization.

XML: space = "preservar": Especifique esse atributo no nível do elemento onde a preservação de espaço em branco é desejada. Isso preserva todos os espaço em branco, o que inclui os espaços que podem ser adicionados por aplicativos de edição de código para imprimir"pretty" Alinhe elementos como o aninhamento de visualmente intuitivo. No entanto, se processam a esses espaços é determinado pelo modelo de conteúdo para o elemento que contém. Evite especificar xml:space="preserve" no nível raiz porque a maioria dos modelos de objeto não consideram o espaço em branco como significativas, independentemente de como você definir o atributo. Definindo xml:space globalmente pode ter conseqüências de desempenho em XAML (particularmente serialização) de processamento em algumas implementações. 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.

Entidades e espaços não separáveis: XAMLoferece suporte a colocar qualquer Unicode entidade dentro de um modelo de objeto de texto. You can use dedicated entities such as nonbreaking space (  in UTF-8 encoding). You can also use rich text controls that support nonbreaking space characters. Você deve ter cuidado se você estiver usando entidades para simular as características de layout, como recuo, porque a saída de tempo de execução das entidades irão variar com base em um número maior de fatores que os recursos para produzir resultados de recuo em um sistema típico de layout, como o uso adequado dos painéis e as margens. For instance, entities are mapped to fonts and can change size in response to user font selection.

East Asian Characters

"East Asian characters" is defined as a set of Unicode character ranges U+20000 to U+2FFFD and U+30000 to U+3FFFD. This subset is also sometimes referred to as "CJK ideographs". For more information, see http://www.unicode.org.

Whitespace and Text Content Models

In practice, preserving whitespace is only of concern for a subset of all possible content models. 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 an IList or ICollection<T> collection.

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

Para fins de ilustração, o restante desta seção faz referência a tipos específicos que são definidos pelo WPF. Os recursos de tratamento de espaço em branco que são descritos neste tópico são geralmente pertinentes para ambos.Os serviços XAML do NET Framework e o WPF. Para ver esse comportamento em ação, você pode experimentar algumas marcações de WPF XAML, exibir os resultados em um gráfico de objeto e serializar volta à marcação novamente.

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. Por exemplo, ListBox leva um IList, mas o espaço em branco (como, por exemplo, alimentações de linha entre cada ListBoxItem) não é preservadas e não processado. Se você tentar usar alimentações de linha como separadores entre cadeias de caracteres para ListBoxItem itens, ela não funciona; as seqüências de caracteres que são separadas pelas alimentações de linha são tratadas como uma seqüência de caracteres e um item.

Those collections that do treat whitespace as significant are typically part of the flow document model. The primary collection that supports whitespace preservation behavior is InlineCollection. Esta classe de coleção é declarada com a WhitespaceSignificantCollectionAttribute; Quando esse atributo é encontrado, o XAML processador tratará o espaço em branco dentro da coleção como significativas. A combinação de xml:space="preserve" e espaço em branco dentro de um WhitespaceSignificantCollectionAttribute indicado na coleção é que todos os espaços em branco é preservado e processado. A combinação de xml:space="default" e espaço em branco dentro de um WhitespaceSignificantCollectionAttribute faz com que a normalização de espaço em branco iniciais descrita anteriormente, que deixa um espaço em determinadas posições e os espaços são preservados e processado. Which behavior is desirable is up to you, and you should use xml:space selectively to enable the behavior that you want.

Also, certain inline elements that connote a linebreak in a flow document model should deliberately not introduce an extra space even in a whitespace significant collection. Por exemplo, o LineBreak elemento tem a mesma finalidade que o <BR/> marca em HTMLe para facilitar a leitura na marcação, normalmente um LineBreak é separado de qualquer texto subseqüente por um avanço de linha criados. That linefeed should not be normalized to become a leading space in the subsequent line. Para permitir esse comportamento, a definição de classe para o LineBreak elemento aplica a TrimSurroundingWhitespaceAttribute, que então é interpretado pelo XAML processador significa que espaço em branco ao redor LineBreak sempre é cortada.

Consulte também

Referência

Entidades e XAML de caractere XML

Manipulando xml:space em XAML

Conceitos

Visão geral do XAML (WPF)