zoukankan      html  css  js  c++  java
  • 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"形式标记)

    如果要更复杂点的效果,比如需要设置划线的颜色、线粗等,如下图:
    文字的特别下划线效果制作

    如何制作类似效果呢?
    方法是:设置 TextBlock 的 TextDecorations 属性,再对 TextDecoration 的 Pen 属性进行设置。

    如下 XAML 代码:

    <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://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>

     

    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;
    }

     

    引申问题:
    可不可以同时画上划线、中划线和下划线?比如:可不可以画如下图所示的文武线呢?
    文字的文武线

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

  • 相关阅读:
    linux下mysql的安装
    linux下mysql设置主从
    linux下安装jdk8并且配置环境变量
    C#实现rabbitmq 延迟队列功能
    对angular.js的一点理解
    angular.js的路由和模板在asp.net mvc 中的使用
    通过Web Api 和 Angular.js 构建单页面的web 程序
    Orchard运用
    Orchard运用
    Orchard运用
  • 原文地址:https://www.cnblogs.com/smiler/p/3238930.html
Copyright © 2011-2022 走看看