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);
            }
  • 相关阅读:
    Python-学习-小例子练习
    Python-学习-import语句导入模块
    Python-类-函数参数-takes 0 positional arguments but 1 was given
    虚拟现实-VR-UE4-构建光照显示光照构建失败,Swarm启动失败
    Qt 实现脉搏检测-2,简陋的功能产品
    Qt 蓝牙部分翻译
    Qt QLabel 播放GIF动画
    Qt 实现脉搏检测-1-心跳曲线部分
    C++学习014函数值传递和地址传递
    Ubuntu 普通用户无法启动Google chrome
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085562.html
Copyright © 2011-2022 走看看