天天看點

WPF中的文字修飾——上劃線,中劃線,基線與下劃線

原文:

WPF中的文字修飾——上劃線,中劃線,基線與下劃線

我們知道,文字的修飾包括:空心字、立體字、劃線字、陰影字、加粗、傾斜等。這裡隻說劃線字的修飾方式,按劃線的位置,我們可将之分為:上劃線、中劃線、基線與下劃線。如圖:

WPF中的文字修飾——上劃線,中劃線,基線與下劃線

從上至下,分别為上劃線(Overline),中劃線(StrikeThrough),基線(Baseline)和下劃線(Underline)。

如何實作?

(1)XAML代碼:

<Page xmlns="

http://schemas.microsoft.com/winfx/2006/xaml/presentation

" xmlns:x="

http://schemas.microsoft.com/winfx/2006/xaml

" >

<TextBlock TextDecorations="Strikethrough" FontSize="72" FontFamily="Arial">A</TextBlock>

</Page>

這裡TextDecorations屬性可以設定為:OverLine, Strikethrough, Baseline, Underline或None,如果沒有設定TextDecorations屬性,則預設為None,即不帶劃線修飾。

(2)使用C#代碼:

private void SetDefaultStrikethrough()

{

   textBlock1.TextDecorations = TextDecorations.Strikethrough;

}

(為了簡潔,這裡隻列出相關的關鍵代碼,其他代碼未用C#列出。textBlock1為TextBlock的名稱,在XAML中使用 x:Name="textBlock1"形式标記)

如果要更複雜點的效果,比如需要設定劃線的顔色、線粗等,如下圖:

WPF中的文字修飾——上劃線,中劃線,基線與下劃線

如何制作類似效果呢?

方法是:設定TextBlock的TextDecorations屬性,再對TextDecoration的Pen屬性進行設定。

如下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>

C#關鍵代碼:

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;

引申問題:

可不可以同時畫上劃線、中劃線和下劃線?比如:可不可以畫如下圖所示的文武線呢?

WPF中的文字修飾——上劃線,中劃線,基線與下劃線

答案是:可以!留給有興趣的朋友去思考吧。

相關閱讀:Typography in Windows Presentation Foundation

http://msdn2.microsoft.com/en-us/library/ms742190.aspx

繼續閱讀