• 2019-1-24-WPF-文字描边


    title author date CreateTime categories
    WPF 文字描边
    lindexi
    2019-01-24 19:47:18 +0800
    2019-1-24 19:40:7 +0800
    WPF

    本文告诉大家如何写出描边的字体

    在WPF如果需要写入描边需要使用 FormattedText 将文字转换为 Geometry 然后通过画出 Geometry 的边框和填充画出描边

    首先创建一个类继承 UIElement 这样就可以重写 OnRender 方法在里面画出文字

    假设需要画出的文字是 欢迎访问我博客 http://lindexi.gitee.io 里面有大量 UWP WPF 博客

           protected override void OnRender(DrawingContext drawingContext)
            {
                var str = "欢迎访问我博客 http://lindexi.gitee.io 里面有大量 UWP WPF 博客";
    
                base.OnRender(drawingContext);
            }

    通过字符串创建 FormattedText 这里需要传入很多参数

                var formattedText = new FormattedText(str, CultureInfo.CurrentCulture,
                    FlowDirection.LeftToRight,
                    new Typeface
                    (
                        new FontFamily("微软雅黑"),
                        FontStyles.Normal,
                        FontWeights.Normal,
                        FontStretches.Normal
                    ),
                    30,
                    Brushes.Black, 96);

    调用 formattedText.BuildGeometry 可以创建 Geometry 参数传入左上角坐标

    然后就是画出这个 Geometry 通过这个 Pen 设置描边的宽度和颜色

                drawingContext.DrawGeometry
                (
                    new SolidColorBrush((Color) ColorConverter.ConvertFromString("#F00002")),
                    new Pen(new SolidColorBrush(Colors.Black), 1),
                    geometry
                );

    打开 xaml 添加这个控件运行代码就可以看到上面界面

            <local:CureekaMasar></local:CureekaMasar>

    所有代码请看下面

           protected override void OnRender(DrawingContext drawingContext)
            {
                var str = "欢迎访问我博客 http://lindexi.gitee.io 里面有大量 UWP WPF 博客";
    
                var formattedText = new FormattedText(str, CultureInfo.CurrentCulture,
                    FlowDirection.LeftToRight,
                    new Typeface
                    (
                        new FontFamily("微软雅黑"),
                        FontStyles.Normal,
                        FontWeights.Normal,
                        FontStretches.Normal
                    ),
                    30,
                    Brushes.Black, 1);
    
                var geometry = formattedText.BuildGeometry(new Point(10, 10));
                
                drawingContext.DrawGeometry
                (
                    new SolidColorBrush((Color) ColorConverter.ConvertFromString("#F00002")),
                    new Pen(new SolidColorBrush(Colors.Black), 1),
                    geometry
                );
    
                base.OnRender(drawingContext);
            }
  • 相关阅读:
    mybatis源码解读(二)——构建Configuration对象
    mybatis源码解读(一)——初始化环境
    JDK1.8源码(七)——java.util.HashMap 类
    JDK1.8源码(六)——java.util.LinkedList 类
    JDK1.8源码(五)——java.util.ArrayList 类
    JDK1.8源码(四)——java.util.Arrays 类
    JDK1.8源码(三)——java.lang.String 类
    JDK1.8源码(二)——java.lang.Integer 类
    JDK1.8源码(一)——java.lang.Object类
    Java的深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085562.html
Copyright © 2020-2023  润新知