TextElement コンテンツ モデルの概要TextElement Content Model Overview

このコンテンツモデルの概要では、TextElementでサポートされるコンテンツについて説明します。This content model overview describes the supported content for a TextElement. Paragraph クラスは TextElementの一種です。The Paragraph class is a type of TextElement. コンテンツ モデルは、他のオブジェクトや要素に含めることのできるオブジェクトや要素を記述します。A content model describes what objects/elements can be contained in others. この概要では、TextElementから派生したオブジェクトに使用するコンテンツモデルの概要を示します。This overview summarizes the content model used for objects derived from TextElement. 詳細については、「フロードキュメントの概要」を参照してください。For more information, see Flow Document Overview.

コンテンツ モデルの図Content Model Diagram

次の図は、TextElement から派生したクラスのコンテンツモデルと、その他の非 TextElement クラスがこのモデルにどのように適合するかをまとめたものです。The following diagram summarizes the content model for classes derived from TextElement as well as how other non- TextElement classes fit into this model.

図: フローコンテンツコンテインメントスキーマDiagram: Flow content containment schema

上の図からわかるように、要素に使用できる子は、クラスが Block クラスと Inline クラスのどちらから派生したものであるかによって必ずしも決定されるとは限りません。As can be seen from the preceding diagram, the children allowed for an element are not necessarily determined by whether a class is derived from the Block class or an Inline class. たとえば、Span (Inline派生クラス) には Inline 子要素のみを含めることができますが、Figure (または Inline派生クラス) には Block 子要素のみを含めることができます。For example, a Span (an Inline-derived class) can only have Inline child elements, but a Figure (also an Inline-derived class) can only have Block child elements. そのため、どの要素を別の要素に含めることができるかをすばやく判断するには、図が役立ちます。Therefore, a diagram is useful for quickly determining what element can be contained in another. 例として、図を使用して、RichTextBoxのフローコンテンツを作成する方法を決定します。As an example, let's use the diagram to determine how to construct the flow content of a RichTextBox.

  1. RichTextBox には、Block派生オブジェクトを含む必要がある FlowDocument が含まれている必要があります。A RichTextBox must contain a FlowDocument which in turn must contain a Block-derived object. 上の図に対応するセグメントを次に示します。The following is the corresponding segment from the preceding diagram.

    図: RichTextBox コンテインメントルールDiagram: RichTextBox containment rules

    この段階では、マークアップは次のようになります。Thus far, this is what the markup might look like.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. 図によれば、ParagraphSectionTableListBlockUIContainer を含むいくつかの Block 要素を選択できます (前の図のブロック派生クラスを参照してください)。According to the diagram, there are several Block elements to choose from including Paragraph, Section, Table, List, and BlockUIContainer (see Block-derived classes in the preceding diagram). たとえば、Tableが必要な場合を考えてみましょう。Let's say we want a Table. 上の図によれば、Table には TableRow 要素を含む TableRowGroup が含まれています。この要素には、Block派生オブジェクトを含む TableCell 要素が含まれています。According to the preceding diagram, a Table contains a TableRowGroup containing TableRow elements, which contain TableCell elements which contain a Block-derived object. 次に示すのは、前の図から取得した Table の対応するセグメントです。The following is the corresponding segment for Table taken from the preceding diagram.

    ダイアグラム: テーブル/の親子スキーマDiagram: Parent/child schema for Table

    対応するマークアップは次のとおりです。The following is the corresponding markup.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. ここでも、TableCellの下に1つ以上の Block 要素が必要です。Again, one or more Block elements are required underneath a TableCell. 簡単にするために、セル内にいくつかのテキストを配置することにします。To make it simple, let's place some text inside the cell. これを行うには、Run 要素を持つ Paragraph を使用します。We can do this using a Paragraph with a Run element. 次に示すのは、ParagraphInline 要素を取り、Run (Inline 要素) がプレーンテキストのみを受け取ることができる図の対応するセグメントです。The following is the corresponding segments from the diagram showing that a Paragraph can take an Inline element and that a Run (an Inline element) can only take plain text.

    ダイアグラム: 段落/の親子スキーマDiagram: Parent/child schema for Paragraph

    ダイアグラム: 実行/の親子スキーマDiagram: Parent/Child schema for Run

例全体をマークアップで次に示します。The following is the entire example in 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>

TextElement のコンテンツをプログラムで操作するWorking with TextElement Content Programmatically

TextElement の内容はコレクションによって構成されるため、プログラムによって TextElement オブジェクトの内容を操作するには、これらのコレクションを使用します。The contents of a TextElement is made up by collections and so programmatically manipulating the contents of TextElement objects is done by working with these collections. TextElement 派生クラスで使用されるコレクションには、次の3種類があります。There are three different collections used by TextElement -derived classes:

これらのコレクションの項目を操作 (追加または削除) するには、インラインブロック、およびListItemsの各プロパティを使用します。You can manipulate (add or remove items) from these collections using the respective properties of Inlines, Blocks, and ListItems. 次の例では、インラインプロパティを使用してスパンのコンテンツを操作する方法を示します。The following examples show how to manipulate the contents of a Span using the Inlines property.

注意

Table では、コンテンツの操作にいくつかのコレクションが使用されますが、これらのコレクションについてはここでは取り上げません。Table uses several collections to manipulate its contents, but they are not covered here. 詳細については、「テーブルの概要」を参照してください。For more information, see Table Overview.

次の例では、新しい Span オブジェクトを作成し、Add メソッドを使用して、Spanの子コンテンツとして2つのテキストランを追加します。The following example creates a new Span object, and then uses the Add method to add two text runs as content children of the 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..."))

次の例では、新しい Run 要素を作成し、Spanの先頭に挿入します。The following example creates a new Run element and inserts it at the beginning of the 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)

次の例では、Span内の最後の Inline 要素を削除します。The following example deletes the last Inline element in the Span.

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

次の例では、Spanからすべての内容 (Inline 要素) をクリアします。The following example clears all of the contents (Inline elements) from the Span.

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

このコンテンツ モデルを共有する種類Types That Share This Content Model

次の型は TextElement クラスを継承し、この概要で説明されている内容を表示するために使用できます。The following types inherit from the TextElement class and may be used to display the content described in this overview.

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

この一覧には、Windows SDK と共に配布される非抽象型のみが含まれていることに注意してください。Note that this list only includes nonabstract types distributed with the Windows SDK. TextElementから継承するその他の型を使用できます。You may use other types that inherit from TextElement.

TextElement オブジェクトを含むことのできる型Types That Can Contain TextElement Objects

WPF コンテンツモデル」を参照してください。See WPF Content Model.

関連項目See also