繪製格式化的文字
更新:2007 年 11 月
本主題概要說明 FormattedText 物件的功能。此物件提供了在 Windows Presentation Foundation (WPF) 應用程式中繪製文字的低階控制。
這個主題包含下列章節。
- 技術概觀
- 使用 FormattedText 物件
- Win32 移轉
- 相關主題
技術概觀
FormattedText 物件可讓您繪製多行文字,文字中的每個字元都可以個別格式化。下列範例顯示已套用幾種格式的文字。
使用 FormattedText 方法的顯示文字
注意事項: |
---|
Win32 移轉一節針對從 Win32 API 進行移轉的程式開發人員,列出 Win32 DrawText 旗標和 Windows Presentation Foundation (WPF) 中的近似對等項目。 |
使用格式化文字的原因
WPF 包含多個將文字繪製至螢幕的控制項。每個控制項都鎖定不同的案例,而且擁有自己的功能與限制清單。一般而言,在需要有限文字支援 (例如使用者介面 (UI) 中的簡短句子) 時,應該使用 TextBlock 項目,而在需要最少文字支援時,則可使用 Label。如需詳細資訊,請參閱 Windows Presentation Foundation 中的文件。
FormattedText 提供的文字格式化功能比 Windows Presentation Foundation (WPF) 文字控制項更強大,而且在您想要使用文字做為裝飾項目的情況下十分有用。如需詳細資訊,請參閱後面的將格式化文字轉換為幾何圖案一節。
此外,FormattedText 物件也可用來建立文字導向的 DrawingVisual 衍生物件。DrawingVisual 為輕量型繪圖類別,可用於呈現圖案、影像或文字。如需詳細資訊,請參閱使用 DrawingVisual 進行點擊測試範例。
使用 FormattedText 物件
若要建立格式化文字,請呼叫 FormattedText 建構函式建立 FormattedText 物件。建立初始格式化文字字串之後,就可以套用某個範圍的格式化樣式。
請使用 MaxTextWidth 屬性將文字限制為特定寬度。文字將會自動換行,以避免超過指定的寬度。請使用 MaxTextHeight 屬性將文字限制為特定高度。超過指定高度的文字將會顯示省略符號 "…"。
顯示自動換行和自略符號的顯示文字
您可以將多個格式化樣式套用至一個或多個字元。例如,您可以同時呼叫 SetFontSize 和 SetForegroundBrush 方法,變更文字前五個字元的格式。
下列程式碼範例會建立 FormattedText 物件,並在文字上套用幾個格式化樣式。
protected override void OnRender(DrawingContext drawingContext)
{
string testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";
// Create the initial formatted text string.
FormattedText formattedText = new FormattedText(
testString,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface("Verdana"),
32,
Brushes.Black);
// Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
formattedText.MaxTextWidth = 300;
formattedText.MaxTextHeight = 240;
// Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
// Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
formattedText.SetFontWeight(FontWeights.Bold, 6, 11);
// Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
formattedText.SetForegroundBrush(
new LinearGradientBrush(
Colors.Orange,
Colors.Teal,
90.0),
6, 11);
// Use an Italic font style beginning at the 28th character and continuing for 28 characters.
formattedText.SetFontStyle(FontStyles.Italic, 28, 28);
// Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, new Point(10, 0));
}
字型大小測量單位
如同 Windows Presentation Foundation (WPF) 應用程式中的其他文字物件,FormattedText 物件也會使用與裝置無關的像素做為測量單位。不過,大部分的 Win32 應用程式都會使用點做為測量單位。如果您想在 Windows Presentation Foundation (WPF) 應用程式中使用以點為單位的顯示文字,必須將與裝置無關的單位 (每單位 1/96 英吋) 轉換為點。下列程式碼範例示範如何執行這個轉換動作。
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
將格式化文字轉換為幾何圖案
您可以將格式化文字轉換為 Geometry 物件,以便建立具有有趣外觀的其他文字類型。例如,您可以根據文字字串的外框來建立 Geometry 物件。
使用線形漸層筆刷的文字外框
下列範例說明藉由修改轉換文字的筆劃、填滿和反白顯示,建立有趣視覺效果的多個方法。
將筆劃和填滿設定為不同色彩的範例
在筆劃上套用影像筆刷的範例
在筆劃和反白顯示上套用影像筆刷的範例
將文字轉換為 Geometry 物件後,文字就不再是字元的集合,因此您無法修改文字字串中的字元。不過,您可以透過修改轉換後文字的描邊和填滿屬性,影響文字的外觀。描邊是指轉換後文字的外框,填滿則是指轉換後文字之外框內的區域。如需詳細資訊,請參閱 HOW TO:建立外框文字。
您也可以將格式化文字轉換為 PathGeometry 物件,然後使用這個物件來反白顯示文字。例如,您可以將動畫套用至 PathGeometry 物件,讓動畫沿著格式化文字的外框行進。
下列範例顯示已轉換為 PathGeometry 物件的格式化文字。動畫中顯示的橢圓形會沿著呈現文字的描邊路徑行進。
沿著文字路徑幾何行進的球體
如需詳細資訊,請參閱 HOW TO:建立文字的 PathGeometry 動畫。
將格式化文字轉換為 PathGeometry 文字之後,您就可以建立格式化文字的其他有趣用法。例如,您可以裁剪視訊以便在格式化文字內顯示。如需詳細資訊,請參閱視訊文字示範。
文字路徑幾何中顯示的視訊
Win32 移轉
用來繪製文字的 FormattedText 功能與 Win32 DrawText 函式的功能類似。下表針對從 Win32 API 進行移轉的程式開發人員,列出 Win32 DrawText 旗標和 Windows Presentation Foundation (WPF) 中的近似對等項目。
DrawText 旗標 |
WPF 對等用法 |
備註 |
---|---|---|
DT_BOTTOM |
請使用 Height 屬性計算適當的 Win32 DrawText 'y' 位置。 |
|
DT_CALCRECT |
||
DT_CENTER |
請使用 TextAlignment 屬性,並將值設定為 Center。 |
|
DT_EDITCONTROL |
無 |
不需要空間寬度和最後一行呈現與架構編輯控制項相同。 |
DT_END_ELLIPSIS |
請使用值為 CharacterEllipsis 的 Trimming 屬性。 請使用 WordEllipsis 取得 Win32 DT_END_ELLIPSIS 與 DT_WORD_ELIPSIS 結尾省略符號;在這種情況下,字元省略符號只會出現在無法以單行顯示的文字。 |
|
DT_EXPAND_TABS |
無 |
不需要定位點會自動擴展成每隔 4 em (約等於 8 個語言無關字元的寬度) 停駐一次。 |
DT_EXTERNALLEADING |
無 |
不需要行距中一律包含外部前置字元。請使用 LineHeight 屬性建立使用者定義的行距。 |
DT_HIDEPREFIX |
無 |
不支援。建構 FormattedText 物件之前,請先從字串移除 '&'。 |
DT_LEFT |
這是預設文字對齊方式。請使用 TextAlignment 屬性,並將值設定為 Left (僅適用於 WPF)。 |
|
DT_MODIFYSTRING |
無 |
不支援。 |
DT_NOCLIP |
裁剪動作不會自動執行。如果要裁剪文字,請使用 VisualClip 屬性。 |
|
DT_NOFULLWIDTHCHARBREAK |
無 |
不支援。 |
DT_NOPREFIX |
無 |
不需要字串中的 '&' 字元一律當做一般字元處理。 |
DT_PATHELLIPSIS |
無 |
請使用值為 WordEllipsis 的 Trimming 屬性。 |
DT_PREFIX |
無 |
不支援。如果要在文字 (例如快速鍵或連結) 中使用底線,請使用 SetTextDecorations 方法。 |
DT_PREFIXONLY |
無 |
不支援。 |
DT_RIGHT |
請使用 TextAlignment 屬性,並將值設定為 Right (僅適用於 WPF)。 |
|
DT_RTLREADING |
將 FlowDirection 屬性設為 RightToLeft。 |
|
DT_SINGLELINE |
無 |
不需要。除非設定 MaxTextWidth 屬性或是文字中包含歸位字元 (Carriage Return)/換行字元 (CR/LF),否則 FormattedText 物件的運作方式與單行控制項相同。 |
DT_TABSTOP |
無 |
不支援使用者定義的定位停駐點 (Tab Stop) 位置。 |
DT_TOP |
不需要預設為靠上對齊。可以使用 Height 屬性計算適當的 Win32 DrawText 'y' 位置,以定義其他垂直定位值。 |
|
DT_VCENTER |
請使用 Height 屬性計算適當的 Win32 DrawText 'y' 位置。 |
|
DT_WORDBREAK |
無 |
不需要FormattedText 物件可自動斷字。您不能停用它。 |
DT_WORD_ELLIPSIS |
請使用值為 WordEllipsis 的 Trimming 屬性。 |
請參閱
工作
概念
Windows Presentation Foundation 中的文件
Windows Presentation Foundation 中的印刷樣式