Partager via


Vue d’ensemble du modèle de contenu TextElement

Cette vue d’ensemble du 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 objets/éléments qui peuvent être contenus dans d’autres. Cette vue d’ensemble récapitule le modèle de contenu utilisé pour les objets dérivés de TextElement. Pour plus d’informations, consultez Vue d’ensemble du document de flux.

Diagramme du modèle de contenu

Le diagramme suivant récapitule le modèle de contenu pour les classes dérivées de TextElement ainsi que la façon dont d’autres classes non TextElement s’intègrent dans ce modèle.

diagramme : schéma de contenu de flux

Comme le montre le diagramme précédent, les enfants autorisés pour un élément ne sont pas nécessairement déterminés par si une classe est dérivée de la classe Block ou d’une classe Inline. Par exemple, une Span (classe dérivée de Inline) ne peut avoir que des éléments enfants Inline, mais un Figure (également une classe dérivée de Inline) ne peut avoir que des éléments enfants Block. Par conséquent, un diagramme est 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 d’un RichTextBox.

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

    Diagramme Diagramme : règles d’autonomie RichTextBox

    Jusqu’à présent, voici à quoi le balisage pourrait ressembler.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. Selon le diagramme, il existe plusieurs éléments Block à choisir parmi lesquels inclure Paragraph, Section, Table, Listet BlockUIContainer (voir classes dérivées de bloc dans le diagramme précédent). Supposons que nous voulons un Table. Selon le diagramme précédent, un Table contient un TableRowGroup contenant des éléments TableRow, qui contiennent des éléments TableCell qui contiennent un objet dérivé de Block. Voici le segment correspondant pour Table extrait du diagramme précédent.

    Diagramme 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. Encore une fois, un ou plusieurs éléments Block sont requis sous un TableCell. Pour simplifier, nous allons placer du texte à l’intérieur de la cellule. Nous pouvons le faire à l’aide d’un Paragraph avec un élément Run. Voici les segments correspondants du diagramme montrant qu’un Paragraph peut prendre un élément Inline et qu’un Run (un élément Inline) ne peut prendre que du texte brut.

    Diagramme Diagramme : schéma parent/enfant pour Paragraphe

    diagramme Diagramme : schéma parent/enfant pour Exécution

Voici l’exemple complet dans le langage de balisage.

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

Utilisation du contenu TextElement par programmation

Le contenu d’une TextElement est constitué par des collections, et par programmation, la manipulation du contenu des objets TextElement est effectuée en travaillant avec ces collections. Il existe trois collections différentes utilisées par les classes TextElement -derived :

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

Remarque

Table utilise plusieurs collections pour manipuler son contenu, mais elles ne sont pas couvertes ici. Pour plus d’informations, consultez Vue d’ensemble de la table.

L'exemple suivant crée un nouvel objet Span, puis utilise la méthode Add pour ajouter deux fragments de texte en tant qu'éléments enfants du contenu du 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..."))

L’exemple suivant crée un élément Run et l’insère au début de la 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)

L’exemple suivant supprime le dernier élément Inline dans le Span.

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

L’exemple suivant efface tous les éléments ("Inline") du "Span".

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

Types qui partagent 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 nonabstract distribués avec le Kit de développement logiciel (SDK) Windows. Vous pouvez utiliser d’autres types qui héritent de TextElement.

Types pouvant contenir des objets TextElement

Consultez Modèle de contenu WPF.

Voir aussi