Compartir a través de


Información general sobre el modelo de contenido textElement

En esta introducción al modelo de contenido se describe el contenido admitido para .TextElement La Paragraph clase es un tipo de TextElement. Un modelo de contenido describe qué objetos o elementos se pueden contener en otros. En esta introducción se resume el modelo de contenido usado para los objetos derivados de TextElement. Para obtener más información, consulte Información general sobre el documento de flujo.

Diagrama del modelo de contenido

En el diagrama siguiente se resume el modelo de contenido de las clases derivadas de TextElement , así como el modo en que otras clases no TextElement se ajustan a este modelo.

Diagrama: esquema de contención de contenido de flujo

Como se puede ver en el diagrama anterior, los elementos secundarios permitidos para un elemento no están determinados necesariamente por si una clase se deriva de la Block clase o una Inline clase. Por ejemplo, un Span elemento (una Inlineclase derivada) solo puede tener Inline elementos secundarios, pero un Figure elemento (también una Inlineclase derivada) solo puede tener Block elementos secundarios. Por lo tanto, un diagrama es útil para determinar rápidamente qué elemento se puede contener en otro. Por ejemplo, vamos a usar el diagrama para determinar cómo construir el contenido de flujo de .RichTextBox

  1. Un RichTextBox debe contener un FlowDocument que, a su vez, debe contener un objeto derivado de Block. A continuación se muestra el segmento correspondiente del diagrama anterior.

    Diagrama: Reglas de contención de RichTextBox

    Hasta ahora, esto es lo que podría parecer el marcado.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. Según el diagrama, hay varios Block elementos entre los que elegir, como Paragraph, Section, Table, List, y BlockUIContainer (vea clases derivadas de bloque en el diagrama anterior). Supongamos que queremos un Table. Según el diagrama anterior, un Table contiene un TableRowGroup que contiene elementos TableRow, que contienen elementos TableCell que contienen un objeto derivado de Block. A continuación se muestra el segmento correspondiente para Table tomado del diagrama anterior.

    Diagrama: Esquema padre/hijo para tabla

    A continuación se muestra el marcado correspondiente.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. De nuevo, se requieren uno o más elementos Block debajo de un TableCell. Para simplificarlo, vamos a colocar texto dentro de la celda. Podemos hacerlo mediante un elemento Paragraph con un Run. A continuación se muestran los segmentos correspondientes del diagrama que muestran que un Paragraph elemento puede tomar un Inline elemento y que un Run elemento (un Inline elemento) solo puede tomar texto sin formato.

    Diagrama: Esquema padre/hijo para párrafo

    Diagrama: Esquema padre/hijo para ejecución

A continuación se muestra el ejemplo completo en el lenguaje de marcado.

<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>

Trabajar con el contenido del elemento de texto programáticamente

El contenido de un TextElement elemento se compone de colecciones, por lo que la manipulación mediante programación del contenido de TextElement los objetos se realiza trabajando con estas colecciones. Existen tres colecciones diferentes utilizadas por las clases -derived.

Puede manipular (agregar o quitar elementos) de estas colecciones mediante las propiedades respectivas de Inlines, Blocks y ListItems. En los ejemplos siguientes se muestra cómo manipular el contenido de un Span mediante la propiedad Inlines.

Nota:

Table usa varias colecciones para manipular su contenido, pero no se tratan aquí. Para obtener más información, vea Descripción general de tablas.

En el siguiente ejemplo se crea un nuevo objeto Span y, a continuación, se usa el método Add para agregar dos segmentos de texto como elementos secundarios de contenido de 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..."))

En el ejemplo siguiente se crea un nuevo Run elemento y se inserta al principio de .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)

En el ejemplo siguiente se elimina el último Inline elemento de Span.

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

En el ejemplo siguiente se eliminan todos los contenidos (elementos de Inline) de Span.

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

Tipos que comparten este modelo de contenido

Los siguientes tipos heredan de la TextElement clase y se pueden usar para mostrar el contenido descrito en esta introducción.

Bold, Figure, Floater, Hyperlink, InlineUIContainer, Italic, LineBreak, ListRunSpanParagraphSectionListItem, . TableUnderline

Tenga en cuenta que esta lista solo incluye tipos no abstractos que se distribuyen con el kit de desarrollo de software (SDK) de Windows. Puede usar otros tipos que heredan de TextElement.

Tipos que pueden contener objetos TextElement

Consulte Modelo de contenido de WPF.

Consulte también