Visão geral do modelo de conteúdo TextElement

Esta visão geral do modelo de conteúdo descreve o conteúdo com suporte para um TextElementarquivo . A Paragraph classe é um tipo de TextElement. Um modelo de conteúdo descreve quais objetos/elementos podem estar contidos em outros. Esta visão geral resume o modelo de conteúdo usado para objetos derivados do 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 não-classes TextElement se encaixam nesse modelo.

Diagram: Flow content containment schema

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

  1. A RichTextBox deve conter um que, por sua vez, deve conter um FlowDocumentBlockobjeto -derivado. A seguir está o segmento correspondente do diagrama anterior.

    Diagram: RichTextBox containment rules

    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 Block elementos para escolher, incluindo Paragraph, , , ListSectionTablee BlockUIContainer (consulte Classes derivadas de blocos no diagrama anterior). Digamos que queremos um Table. De acordo com o diagrama anterior, a Table contém um contendo elementos, que contêm elementos que contêm TableCell um TableRowGroupTableRowBlockobjeto -derivado. A seguir está o segmento correspondente para Table retirado do diagrama anterior.

    Diagram: Parent/child schema for Table

    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 Block elementos são necessários abaixo de um TableCellarquivo . Para simplificar, colocaremos algum texto dentro da célula. Podemos fazer isso usando um Paragraph elemento com Run . A seguir estão os segmentos correspondentes do diagrama mostrando que um pode tomar um elemento e que um (um ParagraphInlineRunInline elemento) só pode usar texto sem formatação.

    Diagram: Parent/child schema for Paragraph

    Diagram: Parent/Child schema for 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 conteúdo TextElement programaticamente

O conteúdo de um TextElement é composto por coleções e, portanto, a manipulação programática do conteúdo de TextElement objetos é feita trabalhando com essas coleções. Há três coleções diferentes usadas por TextElement classes derivadas de -:

Você pode manipular (adicionar ou remover itens) dessas coleções usando as respectivas propriedades de Inlines, Blocks e ListItems. Os exemplos a seguir mostram como manipular o conteúdo de um Span usando a propriedade Inlines.

Observação

Tabela usa várias coleções para manipular o conteúdo, mas isso não é abordado aqui. Para obter mais informações, consulte Visão geral de tabela.

O exemplo a seguir cria um novo Span objeto e, em seguida, usa o Add método para adicionar duas execuções 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 Run elemento 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 Inline elemento no Span.

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

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

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

Tipos que compartilham esse modelo de conteúdo

Os tipos a seguir herdam da TextElement classe 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 essa lista inclui apenas tipos não abstratos distribuídos com o SDK do Windows. Você pode usar outros tipos que herdam do TextElement.

Tipos que podem conter objetos TextElement

Consulte Modelo de conteúdo WPF.

Confira também