次の方法で共有


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

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

コンテンツ モデル図

次の図は、TextElement から派生したクラスのコンテンツ モデルと、他の非 TextElement クラスがこのモデルにどのように適合するかをまとめたものです。

図: フロー コンテンツ包含スキーマ

前の図からわかるように、要素に対して許可される子は、クラスが Block クラスから派生しているか、Inline クラスから派生しているかによって決まるわけではありません。 たとえば、Span (Inline-derived クラス) には Inline 子要素のみを含めることができますが、Figure (Inline派生クラス) には Block 子要素のみを含めることができます。 そのため、ダイアグラムは、別の要素に含めることができる要素をすばやく特定するのに役立ちます。 例として、図を使用して、RichTextBoxのフロー コンテンツを構築する方法を決定しましょう。

  1. RichTextBox には FlowDocument が含まれている必要があり、さらにこれには Block の派生オブジェクトが含まれている必要があります。 前の図の対応するセグメントを次に示します。

    ダイアグラム: RichTextBox の包含ルール

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

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. 図によると、BlockParagraphSectionTableList など、いくつかの BlockUIContainer 要素を選択できます (前の図のブロック派生クラスを参照)。 仮にTableが欲しいとしましょう。 上の図によると、Table には、TableRowGroup が含まれており、その TableRowGroup には TableCell 要素が含まれ、その TableCell 要素には 要素が含まれ、その 要素には 派生オブジェクトが含まれています。 前の図から取得した Table の対応するセグメントを次に示します。

    図: Table の親/子スキーマ の親/子スキーマ

    対応するマークアップを次に示します。

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

    図: Paragraph の親/子スキーマ の親/子スキーマ

    図: Run の親/子スキーマ の親/子スキーマ

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

<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 コンテンツの操作

TextElement の内容はコレクションによって構成されるため、プログラムによって TextElement オブジェクトの内容を操作するには、これらのコレクションを操作します。 TextElement -derived クラスでは、次の 3 つの異なるコレクションが使用されます。

インラインブロック、および ListItemsの各プロパティを使用して、これらのコレクションから項目を操作 (追加または削除) できます。 次の例では、Inlines プロパティを使用して Span の内容を操作する方法を示します。

Table では、いくつかのコレクションを使用してその内容を操作しますが、ここでは説明しません。 詳細については、「テーブルの概要を参照してください。

次の例では、新しい Span オブジェクトを作成し、Add メソッドを使用して、Spanのコンテンツの子として 2 つのテキストランを追加します。

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の先頭に挿入します。

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)

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

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

次の使用例は、Inlineからすべてのコンテンツ (Span 要素) をクリアします。

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

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

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

BoldFigureFloaterHyperlinkInlineUIContainerItalicLineBreakListListItemParagraphRunSectionSpanTableUnderline

この一覧には、Windows SDK で配布される非abstract 型のみが含まれていることに注意してください。 TextElementから継承する他の型を使用できます。

TextElement オブジェクトを含むことができるデータ型

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

こちらも参照ください