WPF 提供強大的 TextDecorations 機制,讓開發者輕鬆實現上劃線、刪除線 (中劃線)、下劃線與基線等文字裝飾,並支援顏色、粗細、虛線、漸層筆刷等進階樣式。本文從基本屬性設定到複雜 Pen 自訂,完整示範各種效果實作。
TextBlock、TextElement 等均擁有 TextDecorations 屬性,可設定為:
OverLine:上劃線Strikethrough:中劃線 (刪除線)Baseline:基線Underline:下劃線 (預設超連結樣式)None:無裝飾 (預設)<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
<TextBlock TextDecorations="Strikethrough" FontSize="72" FontFamily="Arial">A</TextBlock>
</Page>
private void SetDefaultStrikethrough() {
textBlock1.TextDecorations = TextDecorations.Strikethrough;
}
透過 TextDecoration 物件的 Pen、PenOffset、PenThicknessUnit 等屬性,可精確控制裝飾線外觀。
<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
<Canvas>
<TextBlock FontSize="84" FontFamily="Arial Black" Margin="0,0">
<TextBlock.TextDecorations>
<TextDecoration PenOffset="10" PenOffsetUnit="Pixel" PenThicknessUnit="Pixel">
<TextDecoration.Pen>
<Pen Thickness="5">
<Pen.Brush>
<LinearGradientBrush Opacity="0.8" StartPoint="0,0.5" EndPoint="1,0.5">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Yellow" Offset="0" />
<GradientStop Color="Red" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Pen.Brush>
<Pen.DashStyle>
<DashStyle Dashes="1,2,3"/>
</Pen.DashStyle>
</Pen>
</TextDecoration.Pen>
</TextDecoration>
</TextBlock.TextDecorations>
GOOD
</TextBlock>
</Canvas>
</Page>
private void SetLinearGradientUnderline() {
TextDecoration myUnderline = new TextDecoration();
Pen myPen = new Pen();
myPen.Brush = new LinearGradientBrush(Colors.Yellow, Colors.Red, new Point(0, 0.5), new Point(1, 0.5));
myPen.Brush.Opacity = 0.8;
myPen.Thickness = 5;
myPen.DashStyle = DashStyles.Dash;
myUnderline.Pen = myPen;
myUnderline.PenThicknessUnit = TextDecorationUnit.FontRecommended;
TextDecorationCollection myCollection = new TextDecorationCollection();
myCollection.Add(myUnderline);
textBlockGood.TextDecorations = myCollection;
}
TextDecorations 屬性接受 TextDecorationCollection,因此可在同一 TextBlock 上同時加入 OverLine、Strikethrough、Underline 甚至自訂 Baseline,實現複雜排版效果 (如文武線)。具體實作留給讀者嘗試:建立包含多個 TextDecoration 的集合指派給 TextBlock.TextDecorations 即可。
WPF 的文字裝飾系統極具彈性:簡單場景直接用列舉值,複雜樣式則透過 TextDecoration + Pen 實現漸層、虛線、偏移等效果。善用 TextDecorationCollection 更可疊加多種裝飾,滿足專業排版需求。