HOW TO:建立外框文字
更新:2007 年 11 月
在大部分情況中,當您對 Windows Presentation Foundation (WPF) 應用程式中的文字字串加入裝飾時,其實會使用由一組不同字元或圖像 (Glyph) 組成的字串。例如,您可建立線形漸層筆刷,然後將它套用至 TextBox 物件的 Foreground 屬性。當您顯示或編輯文字方塊時,線形漸層筆刷會自動套用至目前文字字串中的字元集。
套用線形漸層筆刷至文字方塊的範例
但是,您也可以將文字轉換為 Geometry 物件,以便建立具有豐富外觀的其他文字類型。例如,您可以根據文字字串的外框來建立 Geometry 物件。
套用線形漸層筆刷至文字外框幾何圖形的範例
將文字轉換為 Geometry 物件後,文字就不再是字元的集合,因此您無法修改文字字串中的字元。不過,您可以透過修改轉換後文字的描邊和填滿屬性,影響文字的外觀。描邊是指轉換後文字的外框,填滿則是指轉換後文字之外框內的區域。
下列範例說明透過修改轉換後文字的描邊和填滿,建立視覺效果的數個方法。
將筆劃和填滿設定為不同色彩的範例
在筆劃上套用影像筆刷的範例
也可以修改轉換後文字的週框方塊矩形,或反白。下列範例說明透過修改所轉換文字的描邊和反白顯示,建立視覺效果的方法。
在筆劃和反白顯示上套用影像筆刷的範例
注意事項: |
---|
如需程式碼範例的來源完整範例,請參閱外框文字自訂控制項範例。 |
範例
將文字轉換為 Geometry 物件的關鍵在於使用 FormattedText 物件。建立這個物件之後,就可以使用 BuildGeometry 和 BuildHighlightGeometry 方法將文字轉換為 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);
}
}