WPF 提供豐富的文字佈局控件,從輕量的 TextBlock 到排版級的 TextFlow (即 FlowDocument),滿足從簡單標籤到複雜文檔的多樣需求。
FontFamily, FontSize, FontWeight, FontStyle, FontStretch。TextWrapping:Wrap (換行) / NoWrap (不換行,預設) — *原書標註有誤,此處更正*。TextAlignment:Left/Right/Center/Justify (兩端對齊)。TextBlock 內可直接放置**任意 UIElement** (非僅 Inline),會按行內流佈局:
<TextBlock TextWrapping="Wrap">
<Button>Split</Button>
<CheckBox>across</CheckBox>
<TextBox>multiple</TextBox>
lines
</TextBlock>
<TextBlock FontSize="18">
<Run>This </Run>
<Italic>is</Italic>
<Bold>rather</Bold>
<Underline>messy</Underline>.
<Hyperlink NavigateUri="https://example.com">www.example.com</Hyperlink>
</TextBlock>
支援:Run, Bold, Italic, Underline, Hyperlink, Span 等。
AccessText (存取鍵提示) 效果不如預期;Subscript/Superscript 已廢棄。
預設 TextBlock 忽略 XAML 中的換行/縮進 (視為單一空白)。保留原始格式需設定:
<TextBlock FontSize="18" xml:space="preserve">
This is
multi-line
text.
</TextBlock>
也可局部套用:<Bold xml:space="preserve">...</Bold>。
建議:僅在直接複製大段文本時使用,正常開發用 <LineBreak/> 或 <Paragraph> 控制換行。
功能遠超 TextBlock,提供 5 種區塊容器:
| 容器 | 用途 | 對應 HTML |
|---|---|---|
Paragraph | 段落 | <p> |
List | 清單 (項目符號/編號) | <ul>/<ol> |
Table | 表格 | <table> |
Floater | 浮動元素 (圖文環繞) | CSS float |
Figure | 獨立圖文塊 (可定位) | <figure> |
微軟白皮書明確指出:**TextBlock 效能遠高於 FlowDocument**。除非需要複雜排版 (分頁、欄位、註腳、浮動),**優先使用 TextBlock**。
FlowDocument 適用場景:報表列印、電子書閱讀器、豐富文檔編輯器。
| 需求 | 推薦控件 | 理由 |
|---|---|---|
| 單行/多行標籤、按鈕文字、簡單提示 | TextBlock | 輕量、高效、支援 Inline 混排 |
| 可編輯文字 | TextBox / RichTextBox | 輸入支援 |
| 複雜文檔 (分頁、目錄、浮動圖表) | FlowDocument + FlowDocumentReader | 排版引擎完整 |
| 固定版面列印 (發票、報表) | FixedDocument | 精確像素控制 |
理解文字控件層級與效能特性,能在「輕量顯示」與「豐富排版」間做出正確架構決策。