次の方法で共有


TextElement コンテンツ モデルの概要

このコンテンツ モデルの概要では、TextElement でサポートされるコンテンツについて説明します。 Paragraph クラスは、TextElement の一種です。 コンテンツ モデルは、他のオブジェクトや要素に含めることのできるオブジェクトや要素を記述します。 ここでは、TextElement から派生したオブジェクトに対して使用するコンテンツ モデルの概要を示します。 詳細については、「フロー ドキュメントの概要」を参照してください。

このトピックは、次のセクションで構成されています。

  • コンテンツ モデルの図
  • TextElement のコンテンツをプログラムで操作する
  • このコンテンツ モデルを共有する型
  • TextElement オブジェクトを含むことのできる型
  • 関連トピック

コンテンツ モデルの図

TextElement から派生したクラスのコンテンツ モデルと、このモデルがその他の TextElement 以外のクラスにどのように適用されるかについてまとめたものを次の図に示します。

ダイアグラム: フロー コンテンツ コンテインメント スキーマ

上の図からわかるように、要素で許容される子は、必ずしもクラスが Block クラスと Inline クラスのどちらから派生したかによって決まるわけではありません。 たとえば、Span (Inline の派生クラス) は Inline 子要素だけを持つことができるのに対し、Figure (同じく Inline の派生クラス) は Block 子要素だけを持つことができます。 そのため、どの要素を別の要素に含めることができるかをすばやく判断するには、図が役立ちます。 例として、RichTextBox のフロー コンテンツを構築する方法を、上の図を使用して判断してみましょう。

  1. RichTextBoxFlowDocument を含んでいる必要があり、FlowDocumentBlock の派生オブジェクトを含んでいる必要があります。 上の図に対応するセグメントを次に示します。

    ダイアグラム: RichTextBox コンテインメント規則

    この段階では、マークアップは次のようになります。

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. 上の図によると、Block 要素には、ParagraphSectionTableList、および BlockUIContainer を含む、いくつかの選択肢があります (上の図の Block の派生クラスを参照)。 ここで、Table が必要だとします。 上の図によると、TableTableRowGroup を含んでおり、これは TableRow 要素を含んでいます。さらにこれは TableCell 要素を含んでおり、これは Block の派生オブジェクトを含んでいます。 上の図の Table に対応する部分を次に示します。

    ダイアグラム: テーブルの親/子スキーマ

    対応するマークアップは次のとおりです。

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. さらに、TableCell の下にも、1 つ以上の Block 要素が必要です。 簡単にするために、セル内にいくつかのテキストを配置することにします。 これを行うには、ParagraphRun 要素と組み合わせて使用します。 上の図でこれに対応する部分を次に示します。ここには、ParagraphInline 要素を取ることができ、Run (Inline 要素の 1 つ) がプレーンテキストのみを取ることができることが示されています。

    ダイアグラム: 段落の親/子スキーマ

     

    ダイアグラム: 実行の親/子スキーマ

例全体をマークアップで次に示します。

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

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

TextElement のコンテンツはコレクションで構成されているため、TextElement オブジェクトのコンテンツをプログラムで操作するには、これらのコレクションを操作すればよいことになります。 TextElement の派生クラスで使用されるコレクションには、次の 3 種類があります。

これらのコレクションを操作 (項目を追加または削除) するには、それぞれ InlinesBlocks、および ListItems プロパティを使用します。 Span のコンテンツを Inlines プロパティを使用して操作する方法を次の例に示します。

メモメモ

Table では、コンテンツの操作にいくつかのコレクションが使用されますが、これらのコレクションについてはここでは取り上げません。詳細については、「テーブルの概要」を参照してください。

次の例では、新しい Span オブジェクトを作成した後、Add メソッドを使用して、2 つのテキスト ランを 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..."));

次の例では、新しい Run 要素を作成して 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);

次の例では、Span 内の最後の Inline 要素を削除します。

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

次の例では、Span からすべての内容 (Inline 要素) を消去します。

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

このコンテンツ モデルを共有する型

次に示す型は、TextElement クラスから継承され、この概要で説明したコンテンツを表示するために使用できます。

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

この一覧には、Windows SDK と共に配布される非抽象型しか含まれていません。 TextElement を継承するその他の種類も使用できます。

TextElement オブジェクトを含むことのできる型

WPF のコンテンツ モデル」を参照してください。

参照

処理手順

方法 : Blocks プロパティを介して FlowDocument を操作する

方法 : Blocks プロパティを介してフロー コンテンツ要素を操作する

方法 : Blocks プロパティを介して FlowDocument を操作する

方法 : Columns プロパティによってテーブルの列を操作する

方法 : RowGroups プロパティを介してテーブルの行グループを操作する