Compartilhar via


Visão geral do modelo de conteúdo TextElement

Esta visão geral do modelo de conteúdo descreve o conteúdo suportado para um TextElement. A classe Paragraph é um tipo de TextElement. Um modelo de conteúdo descreve quais objetos/elementos podem ser contidos em outros. Essa visão geral resume o modelo de conteúdo usado para objetos derivados de TextElement. Para obter mais informações, consulte Visão Geral do Documento de Fluxo.

Diagrama do modelo de conteúdo

O diagrama a seguir resume o modelo de conteúdo para classes derivadas de TextElement, bem como como outras classes não TextElement se encaixam nesse modelo.

Diagrama : Esquema de contenção de conteúdo de fluxo

Como pode ser visto do diagrama anterior, os filhos permitidos para um elemento não necessariamente são determinados pelo fato de uma classe ser derivada da classe Block ou de uma classe Inline. Por exemplo, um Span (uma classe derivada de Inline) só pode ter elementos filho Inline, mas um Figure (também uma classe derivada de Inline) só pode ter elementos filho Block. Portanto, um diagrama é útil para determinar rapidamente qual elemento pode ser contido em outro. Como exemplo, vamos usar o diagrama para determinar como construir o conteúdo de fluxo de um RichTextBox.

  1. Um RichTextBox deve conter um FlowDocument que, por sua vez, deve conter um objeto derivado de Block. Veja a seguir o segmento correspondente do diagrama anterior.

    Diagrama Diagrama: regras de contenção RichTextBox

    Até agora, essa é a aparência que a marcação pode ter.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. De acordo com o diagrama, há vários elementos Block para escolher, incluindo Paragraph, Section, Table, Liste BlockUIContainer (consulte classes derivadas de bloco no diagrama anterior). Digamos que queremos um Table. De acordo com o diagrama anterior, um Table contém um TableRowGroup que contém elementos do tipo TableRow, os quais contêm elementos do tipo TableCell, que por sua vez contêm um objeto derivado de Block. O seguinte é o segmento correspondente para Table obtido do diagrama anterior.

    Diagrama: esquema pai/filho para TabelaFlow_Ovw_SchemaWalkThrough2

    A seguir está a marcação correspondente.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. Novamente, um ou mais elementos Block são necessários sob um TableCell. Para simplificar, vamos colocar um texto dentro da célula. Podemos fazer isso usando um Paragraph com um elemento Run. Veja a seguir os segmentos correspondentes do diagrama mostrando que um Paragraph pode usar um elemento Inline e que um Run (um elemento Inline) só pode usar texto sem formatação.

    Diagrama : esquema de pai/filho para o parágrafo

    Diagrama Diagrama: esquema pai/filho para Run

A seguir está o exemplo inteiro na marcação.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <RichTextBox>
    <FlowDocument>
      
      <!-- Normally a table would have multiple rows and multiple
           cells but this code is for demonstration purposes.-->
      <Table>
        <TableRowGroup>
          <TableRow>
            <TableCell>
              <Paragraph>

                <!-- The schema does not actually require
                     explicit use of the Run tag in markup. It 
                     is only included here for clarity. -->
                <Run>Paragraph in a Table Cell.</Run>
              </Paragraph>
            </TableCell>
          </TableRow>
        </TableRowGroup>
      </Table>

    </FlowDocument>
  </RichTextBox>
</Page>

Trabalhando com o conteúdo do TextElement programaticamente

O conteúdo de um TextElement é composto por coleções e, portanto, manipular programaticamente o conteúdo de objetos TextElement é feito trabalhando com essas coleções. Existem três coleções diferentes que são utilizadas pelas classes TextElement -derived:

Você pode manipular (adicionar ou remover itens) dessas coleções usando as respectivas propriedades de Inlines , Blocos e Itens de Lista . Os exemplos a seguir mostram como manipular os conteúdos de um Span usando a propriedade Inlines.

Nota

A tabela usa várias coleções para manipular seu conteúdo, mas elas não são abordadas aqui. Para obter mais informações, consulte Visão Geral da Tabela.

O exemplo a seguir cria um novo objeto Span e então utiliza o método Add para adicionar duas sequências de texto como filhos de conteúdo do Span.

Span spanx = new Span();
spanx.Inlines.Add(new Run("A bit of text content..."));
spanx.Inlines.Add(new Run("A bit more text content..."));
Dim spanx As New Span()
spanx.Inlines.Add(New Run("A bit of text content..."))
spanx.Inlines.Add(New Run("A bit more text content..."))

O exemplo a seguir cria um novo elemento Run e o insere no início do Span.

Run runx = new Run("Text to insert...");
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx);
Dim runx As New Run("Text to insert...")
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx)

O exemplo a seguir exclui o último elemento Inline no Span.

spanx.Inlines.Remove(spanx.Inlines.LastInline);
spanx.Inlines.Remove(spanx.Inlines.LastInline)

O exemplo a seguir limpa todo o conteúdo (elementosInline) do Span.

spanx.Inlines.Clear();
spanx.Inlines.Clear()

Tipos que compartilham esse modelo de conteúdo

Os tipos a seguir herdam da classe TextElement e podem ser usados para exibir o conteúdo descrito nesta visão geral.

Bold, Figure, Floater, Hyperlink, InlineUIContainer, Italic, LineBreak, List, ListItem, Paragraph, Run, Section, Span, Table, Underline.

Observe que esta lista inclui apenas tipos não abstratos distribuídos com o SDK do Windows. Você pode usar outros tipos que herdam de TextElement.

Tipos que podem conter objetos TextElement

Consulte o modelo de conteúdo do WPF .

Consulte também