TextElement 內容模型概觀
更新:2007 年 11 月
本內容模型概觀說明 TextElement 支援的內容。Paragraph 類別屬於 TextElement 型別。內容模型可說明其他物件/項目可包含的物件/項目。本概觀將摘要說明衍生自 TextElement 的物件所適用的內容模型。如需詳細資訊,請參閱非固定格式文件概觀。
這個主題包含下列章節。
- 內容模型圖表
- 以程式設計方式使用 TextElement 內容
- 共用此內容模型的型別
- 可包含 TextElement 物件的型別
- 相關主題
內容模型圖表
下圖摘要說明衍生自 TextElement 的類別所適用的內容模型,以及其他可包含在此模型中的非 TextElement 類別。
如上圖所示,某個項目所允許的子系,不一定取決於類別是衍生自 Block 類別還是 Inline 類別。例如,Span (Inline 的衍生類別) 只能具有 Inline 子項目,但 Figure (也是 Inline 的衍生類別) 只能具有 Block 子項目。因此,圖表有助於快速判斷可包含於其他項目的項目。例如,我們將使用圖表來決定如何建構 RichTextBox 的非固定格式內容。
RichTextBox 必須包含 FlowDocument,而後者必須包含 Block 的衍生物件。下列是上圖中的對應區段。
到此為止,以下是標記的相關程式碼。
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
根據圖表,有多種 Block 項目可供選擇,包括 Paragraph、Section、Table、List 與 BlockUIContainer (請參閱上圖的區塊衍生類別)。假設我們需要 Table。根據上圖,Table 含有內含 TableRow 項目的 TableRowGroup,而後者又包含具有 Block 衍生物件的 TableCell 項目。下列是取自上圖之 Table 的對應區段。
下列是對應的標記。
<RichTextBox> <FlowDocument> <Table> <TableRowGroup> <TableRow> <TableCell> <!-- One or more Block-derived object… --> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </RichTextBox>
同樣地,TableCell 下必須要有一個或多個 Block 項目。為了簡化,我們在儲存格中加入一些文字。我們可以使用 Paragraph 與 Run 項目來執行此動作。下列是圖表中的對應區段,其中顯示 Paragraph 可採用 Inline 項目,而 Run (Inline 項目) 只能採用純文字。
下列是標記的完整範例。
<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 的衍生類別可使用三種不同的集合:
InlineCollection:代表 Inline 項目的集合。InlineCollection 定義 Paragraph、Span 與 TextBlock 項目所允許的子內容。
BlockCollection:代表 Block 項目的集合。BlockCollection 定義 FlowDocument、Section、ListItem、TableCell、Floater 與 Figure 項目所允許的子內容。
ListItemCollection:在已排序或未排序的 List 中代表特殊內容項目的非固定格式內容項目。
您可以分別使用 Inlines、Blocks 與 ListItems 等屬性,從這些集合進行操作 (加入或移除項目)。下列範例顯示如何使用 Inlines 屬性來操作 Span 的內容。
注意事項: |
---|
資料表可使用數個集合來操作其內容,但在此不加以說明。如需詳細資訊,請參閱資料表概觀。 |
下列範例會建立新的 Span 物件,然後使用 Add 方法加入兩行文字,做為 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..."));
下列範例會建立新的 Run 項目,並將其插入至 Span 的開頭。
Run runx = new Run("Text to insert...");
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx);
下列範例會刪除 Span 中的最後一個 Inline 項目。
spanx.Inlines.Remove(spanx.Inlines.LastInline);
下列範例會清除 Span 的所有內容 (Inline 項目)。
spanx.Inlines.Clear();
共用此內容模型的型別
下列型別繼承自 TextElement 類別,並可用來顯示此概觀所說明的內容。
Bold、Figure、Floater、Hyperlink、InlineUIContainer、Italic、LineBreak、List、ListItem、Paragraph、Run、Section、Span、Table、Underline.
請注意,此清單僅包含 Windows SDK 所散發的非抽象型別。您可以使用繼承自 TextElement 的其他型別。
可包含 TextElement 物件的型別
請參閱 WPF 內容模型。
請參閱
工作
HOW TO:透過 Blocks 屬性管理 FlowDocument
HOW TO:透過 Blocks 屬性管理非固定格式內容項目