共用方式為


HOW TO:建立外框文字

更新:2007 年 11 月

在大部分情況中,當您對 Windows Presentation Foundation (WPF) 應用程式中的文字字串加入裝飾時,其實會使用由一組不同字元或圖像 (Glyph) 組成的字串。例如,您可建立線形漸層筆刷,然後將它套用至 TextBox 物件的 Foreground 屬性。當您顯示或編輯文字方塊時,線形漸層筆刷會自動套用至目前文字字串中的字元集。

套用線形漸層筆刷至文字方塊的範例

以線性漸層筆刷顯示的文字

但是,您也可以將文字轉換為 Geometry 物件,以便建立具有豐富外觀的其他文字類型。例如,您可以根據文字字串的外框來建立 Geometry 物件。

套用線形漸層筆刷至文字外框幾何圖形的範例

以線性漸層筆刷繪製外框的文字

將文字轉換為 Geometry 物件後,文字就不再是字元的集合,因此您無法修改文字字串中的字元。不過,您可以透過修改轉換後文字的描邊和填滿屬性,影響文字的外觀。描邊是指轉換後文字的外框,填滿則是指轉換後文字之外框內的區域。

下列範例說明透過修改轉換後文字的描邊和填滿,建立視覺效果的數個方法。

將筆劃和填滿設定為不同色彩的範例

使用不同填色和筆觸色彩的文字

在筆劃上套用影像筆刷的範例

影像筆刷套用至筆觸的文字

也可以修改轉換後文字的週框方塊矩形,或反白。下列範例說明透過修改所轉換文字的描邊和反白顯示,建立視覺效果的方法。

在筆劃和反白顯示上套用影像筆刷的範例

影像筆刷套用至筆觸的文字

注意事項:

如需程式碼範例的來源完整範例,請參閱外框文字自訂控制項範例

範例

將文字轉換為 Geometry 物件的關鍵在於使用 FormattedText 物件。建立這個物件之後,就可以使用 BuildGeometryBuildHighlightGeometry 方法將文字轉換為 Geometry 物件。第一個方法會傳回格式化文字的幾何圖形,第二個方法則會傳回格式化文字之週框方塊的幾何圖形。下列程式碼範例顯示如何建立 FormattedText 物件,並擷取格式化文字和其週框方塊的幾何圖形。

/// <summary>
/// Create the outline geometry based on the formatted text.
/// </summary>
public void CreateText()
{
    System.Windows.FontStyle fontStyle = FontStyles.Normal;
    FontWeight fontWeight = FontWeights.Medium;

    if (Bold == true) fontWeight = FontWeights.Bold;
    if (Italic == true) fontStyle = FontStyles.Italic;

    // Create the formatted text based on the properties set.
    FormattedText formattedText = new FormattedText(
        Text,
        CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface(
            Font,
            fontStyle,
            fontWeight,
            FontStretches.Normal),
        FontSize,
        System.Windows.Media.Brushes.Black // This brush does not matter since we use the geometry of the text. 
        );

    // Build the geometry object that represents the text.
    _textGeometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0));

    // Build the geometry object that represents the text hightlight.
    if (Highlight == true)
    {
        _textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
    }
}

為了要顯示擷取後的 Geometry 物件,您必須存取用來顯示轉換後文字的物件的 DrawingContext。在這些程式碼範例中,這是透過建立自訂控制項物件來達成,這個控制項物件是從支援使用者定義呈現的類別衍生而來。如需建立自訂控制項的詳細資訊,請參閱外框文字自訂控制項範例

若要在自訂控制項中顯示 Geometry 物件,請覆寫 OnRender 方法。您覆寫後的方法應該要使用 DrawGeometry 方法來繪製 Geometry 物件。

/// <summary>
/// OnRender override draws the geometry of the text and optional highlight.
/// </summary>
/// <param name="drawingContext">Drawing context of the OutlineText control.</param>
protected override void OnRender(DrawingContext drawingContext)
{
    // Draw the outline based on the properties that are set.
    drawingContext.DrawGeometry(Fill, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textGeometry);

    // Draw the text highlight based on the properties that are set.
    if (Highlight == true)
    {
        drawingContext.DrawGeometry(null, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textHighLightGeometry);
    }
}

請參閱

工作

外框文字自訂控制項範例

概念

繪製格式化的文字