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);
            }
  • 相关阅读:
    atomic,nonatomic
    iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
    MagicalRecord的使用(第三方库实现的数据库)
    深浅拷贝
    C中的预编译宏定义
    省电的iPhone定位
    ASP连接读写ACCESS数据库实例(转)
    【摘要】JavaScript 的性能优化:加载和执行
    PC端网站跳转手机端网站
    多行未知文本垂直居中
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085562.html
Copyright © 2011-2022 走看看