共用方式為


繪製格式化的文字

更新:2007 年 11 月

本主題概要說明 FormattedText 物件的功能。此物件提供了在 Windows Presentation Foundation (WPF) 應用程式中繪製文字的低階控制。

這個主題包含下列章節。

  • 技術概觀
  • 使用 FormattedText 物件
  • Win32 移轉
  • 相關主題

技術概觀

FormattedText 物件可讓您繪製多行文字,文字中的每個字元都可以個別格式化。下列範例顯示已套用幾種格式的文字。

使用 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 屬性將文字限制為特定高度。超過指定高度的文字將會顯示省略符號 "…"。

顯示自動換行和自略符號的顯示文字

使用 FormattedText 物件顯示的文字

您可以將多個格式化樣式套用至一個或多個字元。例如,您可以同時呼叫 SetFontSizeSetForegroundBrush 方法,變更文字前五個字元的格式。

下列程式碼範例會建立 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

請使用 Height 屬性計算適當的 Win32 DrawText 'y' 位置。

DT_CALCRECT

Height, Width

請使用 HeightWidth 屬性計算輸出矩形。

DT_CENTER

TextAlignment

請使用 TextAlignment 屬性,並將值設定為 Center

DT_EDITCONTROL

不需要空間寬度和最後一行呈現與架構編輯控制項相同。

DT_END_ELLIPSIS

Trimming

請使用值為 CharacterEllipsisTrimming 屬性。

請使用 WordEllipsis 取得 Win32 DT_END_ELLIPSIS 與 DT_WORD_ELIPSIS 結尾省略符號;在這種情況下,字元省略符號只會出現在無法以單行顯示的文字。

DT_EXPAND_TABS

不需要定位點會自動擴展成每隔 4 em (約等於 8 個語言無關字元的寬度) 停駐一次。

DT_EXTERNALLEADING

不需要行距中一律包含外部前置字元。請使用 LineHeight 屬性建立使用者定義的行距。

DT_HIDEPREFIX

不支援。建構 FormattedText 物件之前,請先從字串移除 '&'。

DT_LEFT

TextAlignment

這是預設文字對齊方式。請使用 TextAlignment 屬性,並將值設定為 Left (僅適用於 WPF)。

DT_MODIFYSTRING

不支援。

DT_NOCLIP

VisualClip

裁剪動作不會自動執行。如果要裁剪文字,請使用 VisualClip 屬性。

DT_NOFULLWIDTHCHARBREAK

不支援。

DT_NOPREFIX

不需要字串中的 '&' 字元一律當做一般字元處理。

DT_PATHELLIPSIS

請使用值為 WordEllipsisTrimming 屬性。

DT_PREFIX

不支援。如果要在文字 (例如快速鍵或連結) 中使用底線,請使用 SetTextDecorations 方法。

DT_PREFIXONLY

不支援。

DT_RIGHT

TextAlignment

請使用 TextAlignment 屬性,並將值設定為 Right (僅適用於 WPF)。

DT_RTLREADING

FlowDirection

FlowDirection 屬性設為 RightToLeft

DT_SINGLELINE

不需要。除非設定 MaxTextWidth 屬性或是文字中包含歸位字元 (Carriage Return)/換行字元 (CR/LF),否則 FormattedText 物件的運作方式與單行控制項相同。

DT_TABSTOP

不支援使用者定義的定位停駐點 (Tab Stop) 位置。

DT_TOP

Height

不需要預設為靠上對齊。可以使用 Height 屬性計算適當的 Win32 DrawText 'y' 位置,以定義其他垂直定位值。

DT_VCENTER

Height

請使用 Height 屬性計算適當的 Win32 DrawText 'y' 位置。

DT_WORDBREAK

不需要FormattedText 物件可自動斷字。您不能停用它。

DT_WORD_ELLIPSIS

Trimming

請使用值為 WordEllipsisTrimming 屬性。

請參閱

工作

視訊文字示範

HOW TO:建立外框文字

概念

Windows Presentation Foundation 中的文件

Windows Presentation Foundation 中的印刷樣式

HOW TO:建立文字的 PathGeometry 動畫

參考

FormattedText