zoukankan      html  css  js  c++  java
  • 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);
            }
  • 相关阅读:
    Java调用getResource方法获取文件路径乱码
    Java时间格式转换
    java——枚举类型通过反射获取属性值并合成Map进行对比取值
    JXLS问题
    elementUI——select 根据传入的ID值选中选项
    强、软、弱、虚四种引用的区别
    frp + ssl证书 + 宝塔面板 实现 https 访问内网可道云
    ReentrantLock 公平锁和非公平锁的区别
    Stream流式计算
    四大函数式接口
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085562.html
Copyright © 2011-2022 走看看