Información general sobre el modelo de contenido de TextElement

Actualización: noviembre 2007

En esta información general del modelo de contenido se describe el contenido compatible con TextElement. La clase Paragraph es un tipo de TextElement. Un modelo de contenido describe qué objetos o elementos se pueden contener en otros. En esta información general se resume el modelo de contenido utilizado para los objetos derivados de TextElement. Para obtener más información, consulte Información general sobre documentos dinámicos.

Este tema contiene las secciones siguientes.

  • Diagrama del modelo de contenido
  • Trabajar mediante programación con contenido de TextElement
  • Tipos que comparten este modelo de contenido
  • Tipos que pueden contener objetos TextElement
  • Temas relacionados

Diagrama del modelo de contenido

En el diagrama siguiente se resume el modelo de contenido para las clases derivadas de TextElement, y también cómo encajan en este modelo otras clases que no son TextElement.

Diagrama: Esquema de contención de contenido dinámico

Como se puede observar en el diagrama anterior, los elementos secundarios que se permiten para un elemento no vienen determinados necesariamente por el hecho de si una clase se deriva de la clase Block o de una clase Inline. Por ejemplo, Span (una clase derivada de Inline) únicamente puede tener elementos secundarios Inline, pero una clase Figure (también derivada de Inline) únicamente puede tener elementos secundarios Block. Por consiguiente, un diagrama es útil para determinar rápidamente qué elemento puede incluirse en otro. Como ejemplo, utilicemos el diagrama para determinar cómo construir el contenido dinámico de un elemento RichTextBox.

  1. Un objeto RichTextBox debe contener un elemento 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

    Llegados a este punto, éste es el aspecto que podría tener el marcado.

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

    Diagrama: Esquema primario/secundario 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 elemento TableCell. Para facilitar el proceso, coloquemos texto dentro de la celda. Podemos hacerlo utilizando un objeto Paragraph con un elemento Run. A continuación se muestran los segmentos correspondientes del diagrama que demuestran que un objeto Paragraph puede aceptar un elemento Inline y que un objeto Run (un elemento Inline) sólo puede aceptar texto sin formato.

    Diagrama: Esquema primario/secundario para párrafo

     

    Diagrama: Esquema primario/secundario para ejecución

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

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

Trabajar mediante programación con contenido de TextElement

El contenido de un elemento TextElement está compuesto por colecciones; en consecuencia, para manipular mediante programación el contenido de los objetos TextElement se trabaja con estas colecciones. Hay tres colecciones diferentes utilizadas por las clases derivadas de TextElement:

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

Nota

El objeto Table utiliza varias colecciones para manipular su contenido, pero no se abordan aquí. Para obtener más información, consulte Información general sobre tablas.

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

En el ejemplo siguiente se crea un nuevo elemento Run y se inserta al principio de Span.

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

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

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

En el siguiente ejemplo se borra todo el contenido (los elementos Inline) de Span.

spanx.Inlines.Clear();

Tipos que comparten este modelo de contenido

Los tipos siguientes heredan de la clase TextElement y se utilizan para mostrar el contenido descrito en esta información general.

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

Observe que esta lista incluye únicamente los tipos no abstractos distribuidos con Windows SDK. Puede utilizar otros tipos que heredan de TextElement.

Tipos que pueden contener objetos TextElement

Consulte Modelo de contenido de WPF.

Vea también

Tareas

Cómo: Manipular un objeto FlowDocument mediante la propiedad Blocks

Cómo: Manipular elementos de contenido dinámico mediante la propiedad Blocks

Cómo: Manipular un objeto FlowDocument mediante la propiedad Blocks

Cómo: Manipular las columnas de una tabla mediante la propiedad Columns

Cómo: Manipular grupos de filas de una tabla mediante la propiedad RowGroups