Partager via


Vue d'ensemble du modèle de contenu de TextElement

Cette vue d'ensemble de modèle de contenu décrit le contenu pris en charge pour un TextElement. La classe Paragraph est un type de TextElement. Un modèle de contenu décrit les types d'objets/d'éléments qui peuvent être contenus dans d'autres. Cette vue d'ensemble résume le modèle de contenu utilisé pour les objets dérivés de TextElement. Pour plus d'informations, consultez Vue d'ensemble des documents dynamiques.

Cette rubrique comprend les sections suivantes.

  • Diagramme de modèle de contenu
  • Utilisation du contenu de TextElement par programme
  • Types partageant ce modèle de contenu
  • Types qui peuvent contenir des objets TextElement
  • Rubriques connexes

Diagramme de modèle de contenu

Le diagramme suivant résume le modèle de contenu pour les classes dérivées de TextElement ainsi que la façon dont les autres classes non-TextElement s'adaptent à ce modèle.

Diagramme : schéma de relation contenant-contenu du flux

Comme vous pouvez le constater dans le diagramme précédent, les enfants autorisés pour un élément ne sont pas nécessairement déterminés par le fait qu'une classe dérive de la classe Block ou d'une classe Inline. Par exemple, une Span (une classe dérivée Inline) peut uniquement avoir des éléments enfants Inline, mais une Figure (également une classe dérivée Inline) peut uniquement avoir des éléments enfants Block. Par conséquent, ce diagramme est très utile pour déterminer rapidement quel élément peut être contenu dans un autre. Par exemple, utilisons le diagramme pour déterminer comment construire le contenu de flux de RichTextBox.

  1. RichTextBox doit contenir unFlowDocument qui doit à son tour contenir un objet dérivé Block. Voici le segment correspondant extrait du diagramme précédent.

    Diagramme : règles de relation contenant-contenu RichtextBox

    À ce stade, le balisage peut ressembler à ceci.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. D'après le schéma, plusieurs éléments Block peuvent être sélectionnés, notamment Paragraph, Section, Table, List et BlockUIContainer (voir classes dérivées de Block dans le diagramme précédent). Supposons que nous souhaitons Table. Le diagramme précédent indique qu'un Table contient un TableRowGroup contenant des éléments TableRow, qui contiennent des éléments TableCell contenant eux-mêmes un objet dérivé de Block. Voici le segment correspondant pour Table, extrait du diagramme précédent.

    Diagramme : schéma parent/enfant pour Table

    Voici le balisage correspondant.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. Ici encore, un ou plusieurs éléments Block sont requis sous TableCell. Pour simplifier, insérons du texte dans la cellule. Pour cela, nous pouvons utiliser un Paragraph avec un élément Run. Voici les segments correspondants extraits du diagramme ; ils indiquent qu'un Paragraph peut contenir un élément Inline et qu'un Run (élément Inline) peut uniquement contenir du texte brut.

    Diagramme : schéma parent/enfant pour Paragraph

     

    Diagramme : schéma parent/enfant pour Run

Voici le balisage de l'exemple complet.

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

Utilisation du contenu de TextElement par programme

Le contenu de TextElement est composé de collections. La manipulation par programme du contenu d'objets TextElement se fait en travaillant avec ces collections. Il existe trois collections différentes utilisées par les classes dérivées TextElement :

Vous pouvez manipuler (ajouter ou supprimer des éléments) ces collections à l'aide des propriétés Inlines, Blocks et ListItems correspondantes. Les exemples suivants montrent comment manipuler le contenu d'un Span à l'aide de la propriété Inlines.

RemarqueRemarque

La table utilise plusieurs collections pour manipuler son contenu, mais elles ne sont pas abordées ici.Pour plus d'informations, consultez Vue d'ensemble de Table.

L'exemple suivant crée un objet Span, puis utilise la méthode Add pour ajouter deux exécutions de texte comme contenu enfant du Span.

            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..."))
Span spanx = new Span();
spanx.Inlines.Add(new Run("A bit of text content..."));
spanx.Inlines.Add(new Run("A bit more text content..."));

L'exemple suivant crée un élément Run et l'insère au début de Span.

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

L'exemple suivant supprime le dernier élément Inline de Span.

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

L'exemple suivant efface tout le contenu (éléments Inline de Span.

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

Types partageant ce modèle de contenu

Les types suivants héritent de la classe TextElement et peuvent être utilisés pour afficher le contenu décrit dans cette vue d'ensemble.

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

Notez que cette liste inclut uniquement les types non abstraits distribués avec le Windows SDK. Vous pouvez utiliser d'autres types qui héritent de TextElement.

Types qui peuvent contenir des objets TextElement

Consultez Modèle de contenu WPF.

Voir aussi

Tâches

Comment : manipuler un FlowDocument avec la propriété Blocks

Comment : manipuler des éléments de contenu de flux avec la propriété Blocks

Comment : manipuler un FlowDocument avec la propriété Blocks

Comment : manipuler les colonnes d'un tableau avec la propriété Columns

Comment : manipuler les groupes de lignes d'un tableau avec la propriété RowGroups