Share via


Visão geral do modelo Conteúdo TextElement

Esta visão geral do modelo de conteúdo descreve o conteúdo suportado por um TextElement. A classe Paragraph é um tipo de TextElement. Um modelo de conteúdo descreve quais objetos/elementos pode estar contidos em outros. Esta visão geral sobre resume o modelo de conteúdo usado para objetos derivados de TextElement. Para obter mais informações, consulte Flow Document Overview.

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

  • Diagrama de Modelo de conteúdo
  • Trabalhando com conteúdo TextElement de forma programática
  • Tipos que compartilham esse modelo de conteúdo
  • Tipos que podem conter objetos TextElement
  • Tópicos relacionados

Diagrama de Modelo de conteúdo

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

Diagrama: Fluxo Zoom, Para Cima e Ampliar esquema de detenção

Como pode ser deduzido do diagrama anterior, os filhos permitidos para um elemento não necessariamente são determinados se uma classe é derivada da classe Block ou a classe Inline. Por exemplo, um Span (uma classe derivada de Inline) só pode ter elementos filho Inline, mas uma Figure (também uma classe derivada Inline) só pode ter elementos Block filho. Therefore, a diagram is useful for quickly determining what element can be contained in another. As an example, let's use the diagram to determine how to construct the flow content of a RichTextBox.

  1. Um RichTextBox deve conter um FlowDocument que por sua vez deve conter um objeto derivado de Block. A seguir está o segmento correspondente do diagrama anterior.

    Diagrama: Regras de detenção RichTextBox

    Thus far, this is what the markup might look like.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. Segundo o diagrama, há vários elementos Blocka serem escolhidos, incluindo Paragraph, Section,Table,List e BlockUIContainer (consulte classes derivadas bloqueadas no diagrama anterior). Let's say we want a Table. De acordo com para o diagrama anterior, um Table contém um TableRowGroup contendo elementos TableRow, que contêm elementos TableCell que contêm um objeto derivado de Block. A seguir está o segmento correspondente para Table extraído do diagrama anterior.

    Diagrama: Esquema de pai/filho para Zoom, Para Cima e Ampliar

    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árias sob um TableCell. To make it simple, let's place some text inside the cell. We can do this using a Paragraph with a Run element. A seguir estão os segmentos correspondentes de diagrama mostrando que um Paragraph pode levar um elemento Inline e que um Run (um elemento Inline) pode levar apenas texto sem-formatação.

    Diagrama: Pai/filho Zoom, Para Cima e Ampliar para parágrafo

     

    Diagrama: Esquema de pai/filho para executar

A seguir é o inteiro exemplo em marcação.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://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 de forma programática

O conteúdo de um TextElement é composto por coleções e portanto manipular programaticamente o conteúdo de objetos TextElement é feito ao trabalhar com essas coleções. Há três coleções diferentes usadas por classes derivadas de TextElement:

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çãoObservação:

Tabela usa várias coleções a m anipulate seu Sumário, mas eles não são abordados aqui. Para obter mais informações, s EE Visão Geral da Tabela.

O exemplo a seguir cria um novo objeto Span, e usa o método Add para adicionar dois blocos de texto como filhos 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..."));

O seguinte exemplo cria um novo elemento Run e o insere ao começo do Span.

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

The following example deletes the last Inline element in the Span.

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

The following example clears all of the contents (Inline elements) from the Span.

spanx.Inlines.Clear();

Tipos que compartilham esse modelo de conteúdo

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

Tipos que podem conter objetos TextElement

Consulte Modelo de conteúdo WPF.

Consulte também

Tarefas

Como: Manipular um FlowDocument por meio da Propriedade Blocks

Como: Manipular Elementos de Conteúdo de Fluxo através da Propriedade Blocks

Como: Manipular um FlowDocument por meio da Propriedade Blocks

Como: Manipular as colunas de uma tabela por meio da propriedade Columns

Como: Manipulate a Table's Row Groups through the RowGroups Property