TextElement コンテンツ モデルの概要
このコンテンツ モデルの概要では、TextElementでサポートされているコンテンツについて説明します。 Paragraph クラスは、TextElementの型です。 コンテンツモデルは、他のオブジェクト/要素を含むことができる内容を説明します。 この概要では、TextElementから派生したオブジェクトに使用されるコンテンツ モデルの概要を示します。 詳細については、「フロードキュメントの概要
コンテンツ モデル図
次の図は、TextElement から派生したクラスのコンテンツ モデルと、他の非 TextElement
クラスがこのモデルにどのように適合するかをまとめたものです。
前の図からわかるように、要素に対して許可される子は、クラスが Block クラスから派生しているか、Inline クラスから派生しているかによって決まるわけではありません。 たとえば、Span (Inline-derived クラス) には Inline 子要素のみを含めることができますが、Figure (Inline派生クラス) には Block 子要素のみを含めることができます。 そのため、ダイアグラムは、別の要素に含めることができる要素をすばやく特定するのに役立ちます。 例として、図を使用して、RichTextBoxのフロー コンテンツを構築する方法を決定しましょう。
RichTextBox には FlowDocument が含まれている必要があり、さらにこれには Block の派生オブジェクトが含まれている必要があります。 前の図の対応するセグメントを次に示します。
ここまでは、マークアップの外観は次のようになります。
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
図によると、Paragraph、Section、Table、List、BlockUIContainer など、いくつかの Block 要素を選択できます (前の図のブロック派生クラスを参照)。 仮にTableが欲しいとしましょう。 上の図によると、Table には、TableRowGroup が含まれており、その TableRowGroup には TableRow 要素が含まれ、その TableRow 要素には TableCell 要素が含まれ、その TableCell 要素には Block派生オブジェクトが含まれています。 前の図から取得した Table の対応するセグメントを次に示します。
の親/子スキーマ
対応するマークアップを次に示します。
<RichTextBox> <FlowDocument> <Table> <TableRowGroup> <TableRow> <TableCell> <!-- One or more Block-derived object… --> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </RichTextBox>
ここでも、TableCellの下には 1 つ以上の Block 要素が必要です。 簡単にするために、セル内にテキストを配置しましょう。 これは、Paragraph を Run 要素と共に使用することで行うことができます。 次に示す図の対応するセグメントは、Paragraph が Inline 要素を受け取ることができ、Run (Inline 要素) がプレーン テキストのみを受け取ることができることを示しています。
の親/子スキーマ
の親/子スキーマ
マークアップの例全体を次に示します。
<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 つの異なるコレクションが使用されます。
InlineCollection: Inline 要素のコレクションを表します。 InlineCollection は、Paragraph、Span、および TextBlock 要素の許容される子コンテンツを定義します。
BlockCollection: Block 要素のコレクションを表します。 BlockCollection は、FlowDocument、Section、ListItem、TableCell、Floater、および Figure 要素の許容される子コンテンツを定義します。
ListItemCollection: 順序付けされたまたは無順の List内の特定のコンテンツ項目を表すフローコンテンツ要素。
インライン、ブロック、および 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)
次の例では、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 で配布される非abstract 型のみが含まれていることに注意してください。 TextElementから継承する他の型を使用できます。
TextElement オブジェクトを含むことができるデータ型
関連項目
.NET Desktop feedback