TextElement 內容模型概觀
此內容模型概觀描述 TextElement 支援的內容。 Paragraph 類別是 TextElement 類型。 內容模型描述哪些物件/元素可包含於其他物件/元素內。 本概觀摘要說明用於衍生自 TextElement 之物件的內容模型。 如需詳細資訊,請參閱 非固定格式文件概觀。
內容模型圖表
下圖摘要說明衍生自 TextElement 之類別的內容模型,以及其他非 TextElement
的類別如何符合此模型。
圖表:非固定格式內容內含項目結構描述Flow_Content_Schema
如上圖所示,元素允許的子系不一定取決於類別是衍生自 Block 類別或 Inline 類別。 例如,Span (Inline 衍生類別) 只能有 Inline 子元素,但 Figure (也是 Inline 衍生類別) 只能有 Block 子元素。 因此,可以快速判斷哪些項目可以包含其他項目的圖表就很有用。 請看範例,了解在使用圖表的情形下如何建構 RichTextBox 的非固定格式內容。
RichTextBox 必須包含 FlowDocument,而 FlowDocument 又必須包含 Block 衍生物件。 以下是上圖的對應區段。
圖表:RichTextBox 內含項目規則Flow_Ovw_SchemaWalkThrough1
這是標記目前可能的樣子。
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
根據圖表,有數個 Block 元素可供選擇,包括 Paragraph、Section、Table、List 和 BlockUIContainer (請參閱上圖中的區塊衍生類別)。 假設我們想要 Table。 根據上述圖表,Table 包含的 TableRowGroup 包含 TableRow 元素,而其中包含的 TableCell 元素包含 Block 衍生物件。 以下是取自上圖的 Table 的對應區段。
圖表:父元素/子元素結構描述表Flow_Ovw_SchemaWalkThrough2
以下是對應的標記。
<RichTextBox> <FlowDocument> <Table> <TableRowGroup> <TableRow> <TableCell> <!-- One or more Block-derived object… --> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </RichTextBox>
同樣地,TableCell 底下需要一或多個 Block 元素。 為求簡便,我們在儲存格中放入一些文字。 我們可以使用有 Run 元素的 Paragraph 來執行這項操作。 以下為圖表中的對應區段,顯示 Paragraph 可採用 Inline 元素,但 Run (Inline 元素) 只能採用純文字。
圖表:段落的父元素/子元素結構描述Flow_Ovw_SchemaWalkThrough3
圖表:流程執行父元素/子元素結構描述Flow_Ovw_SchemaWalkThrough4
以下是標記的完整範例。
<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 衍生類別使用三個不同的集合:
InlineCollection 表示 Inline 元素的集合。 InlineCollection 會定義 Paragraph、Span 和 TextBlock 項目的可允許子內容。
InlineCollection 表示 Inline 元素的集合。 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..."));
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 散發的非抽象類型。 您可使用繼承自 TextElement 的其他類型。
可包含 TextElement 物件的類型
請參閱 WPF 內容模型。