Übersicht über das TextElement-Inhaltsmodell

In dieser Inhaltsmodellübersicht werden die unterstützten Inhalte für ein TextElement beschrieben. Die Paragraph-Klasse ist ein Typ von TextElement. Ein Inhaltsmodell beschreibt, welche Objekte/Elemente in anderen enthalten sein können. In dieser Übersicht wird das Inhaltsmodell für TextElement zusammengefasst, das für abgeleitete Objekte verwendet wird. Weitere Informationen finden Sie unter Übersicht über Flussdokumente.

Inhaltsmodelldiagramm

Die folgende Abbildung fasst das Inhaltsmodell für Klassen zusammen, die von TextElement abgeleitet sind, und stellt dar, wie andere Klassen als die TextElement-Klasse in dieses Modell passen.

Diagram: Flow content containment schema

Wie aus der Abbildung oben ersichtlich ist, werden die für ein Element zulässigen untergeordneten Elemente nicht zwingend davon bestimmt, ob eine Klasse von der Block-Klasse oder der Inline-Klasse abgeleitet wird. Beispielsweise kann ein Span-Element (von Inline abgeleitete Klasse) nur untergeordnete Inline-Elemente enthalten, aber ein Figurea-Element (auch eine von Inline abgeleitete Klasse) kann nur untergeordnete Block-Elemente aufweisen. Aus diesem Grund ist ein Diagramm nützlich, um schnell zu bestimmen, welches Element in einem anderen eingeschlossen sein kann. Verwenden wir die Abbildung beispielsweise dazu, zu bestimmen, wie der fortlaufende Inhalt einer RichTextBox-Klasse konstruiert wird.

  1. Ein RichTextBox-Element muss ein FlowDocument enthalten, das wiederum ein von Block abgeleitetes Objekt enthalten muss. Im Folgenden wird das entsprechende Segment aus dem vorherigen Diagramm dargestellt.

    Diagram: RichTextBox containment rules

    Bis jetzt könnte das Markup wie folgt aussehen.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. Der Abbildung zufolge gibt es mehrere Block-Elemente zur Auswahl, darunter Paragraph, Section, Table, List und BlockUIContainer (siehe „blockabgeleitete Klassen“ in der Abbildung oben). Angenommen, wir möchten ein Table-Element verwenden. Gemäß der Abbildung oben enthält ein Table-Element eine TableRowGroup, die TableRow-Elemente enthält, die wiederum TableCell-Elemente enthalten, die ein Block-abgeleitetes Objekt enthalten. Im Folgenden wird das entsprechende Segment für Table aus der Abbildung oben dargestellt.

    Diagram: Parent/child schema for Table

    Im Folgenden wird das entsprechende Markup dargestellt.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. Erneut ist mindestens ein Block-Element unter einem TableCell-Element erforderlich. Um es einfach zu gestalten, fügen wir Text in die Zelle ein. Dazu können wir ein Paragraph-Element mit einem Run-Element verwenden. Im Folgenden werden die entsprechenden Segmente aus der Abbildung dargestellt, die zeigen, dass ein Paragraph ein Inline-Element annehmen kann und dass ein Run-Element (ein Inline-Element) ausschließlich Nur-Text annehmen kann.

    Diagram: Parent/child schema for Paragraph

    Diagram: Parent/Child schema for Run

Nachstehend finden Sie das gesamte Beispiel im Markup.

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

Programmgesteuertes Arbeiten mit TextElement-Inhalt

Der Inhalt von TextElement besteht aus Sammlungen, sodass die programmgesteuerte Bearbeitung des Inhalts von TextElement-Objekten durch Arbeiten mit diesen Sammlungen erfolgt. Es gibt drei verschiedene Sammlungen, die von von TextElement abgeleiteten Klassen verwendet werden:

Sie können diese Sammlungen mithilfe der jeweiligen Eigenschaften Inlines, Blocks und ListItems bearbeiten (Elemente hinzufügen oder entfernen). Die folgenden Beispiele zeigen, wie der Inhalt eines Span-Elements mit der Inlines-Eigenschaft bearbeitet wird.

Hinweis

Table verwendet mehrere Auflistungen, um den Inhalt zu bearbeiten. Diese werden hier aber nicht aufgeführt. Weitere Informationen finden Sie unter Übersicht über Tabellen.

Das folgende Beispiel erstellt ein neues Span-Objekt und verwendet dann die Add-Methode, um zwei Textläufe als untergeordnete Inhaltselemente von Span hinzuzufügen.

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..."))

Das folgende Beispiel erstellt ein neues Run-Element und fügt es am Anfang von Span ein.

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)

Im folgenden Beispiel wird das letzte Inline-Element in Span gelöscht.

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

Das folgende Beispiel löscht den gesamten Inhalt (Inline-Elemente) aus Span.

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

Typen, für die dieses Inhaltsmodell freigegeben ist

Die folgenden Typen erben von der TextElement-Klasse und können verwendet werden, um den in dieser Übersicht beschriebenen Inhalt anzuzeigen.

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

Beachten Sie, dass diese Liste nur nicht abstrakte Typen umfasst, die mit dem Windows SDK verteilt werden. Sie können andere Typen verwenden, die von TextElement erben.

Typen, die TextElement-Objekte enthalten können

Siehe WPF-Inhaltsmodell.

Siehe auch