当前位置:

首页 > 软件教程 > WPF文字描边实现方法详解

WPF文字描边实现方法详解

在WPF中实现文字描边的方法有多种,本文将探讨如何通过将文字转换为Geometry来实现这一效果。以下是详细步骤和方法:前言WPF的TextBlock提供了多种常用的文字修饰功能,足以满足日常需求。然而,若需更丰富的表现方式,WPF提供了更复杂但功能强大的工具。例如,实现文字描边就有几种方法可以达到效果。本文将简要介绍这些实现文字描边的手法。将文字转换为Geometry实现文字描边的关键是使用FormattedText将文字转换为Geometry,然后通过其他技术为Geometr

本文目录

    在 WPF 中实现文字描边的方法有多种,本文将探讨如何通过将文字转换为 Geometry 来实现这一效果。以下是详细步骤和方法:

    1. 前言

      WPF 的 TextBlock 提供了多种常用的文字修饰功能,足以满足日常需求。然而,若需更丰富的表现方式,WPF 提供了更复杂但功能强大的工具。例如,实现文字描边就有几种方法可以达到效果。本文将简要介绍这些实现文字描边的手法。

    2. 将文字转换为 Geometry

      实现文字描边的关键是使用 FormattedText 将文字转换为 Geometry,然后通过其他技术为 Geometry 添加边框并绘制。在 WPF 中,Geometry 及其派生类(如 EllipseGeometry、LineGeometry、PathGeometry、RectangleGeometry 等)用于描述 2D 形状的集合图形。FormattedText 的 BuildGeometry 函数可以将文字转换为 GeometryGroup(表示由其他 Geometry 对象组成的复合几何图形)。以下是实现该转换的代码:

      private Geometry CreateTextGeometry(){
          // 创建基于设置属性的格式化文本。
          FormattedText formattedText = new FormattedText(
              Text,
              CultureInfo.CurrentCulture,
              FlowDirection.LeftToRight,
              new Typeface(
                  FontFamily,
                  FontStyle,
                  FontWeight,
                  FontStretch),
              FontSize,
              System.Windows.Media.Brushes.Black,// 此画笔不重要,因为我们使用的是文本的几何形状。
              100);
          // 构建表示文本的几何对象。
          return formattedText.BuildGeometry(new Point(0, 0));
      }

      获得 Geometry 后,可以通过两种方式将其绘制出来。

    3. 使用 DrawingContext

      WPF 中的 DrawingContext 是一个基础的绘图对象,用于绘制各种图形。其最简单的使用方式是重载 UIElement 的 OnRender 方法,在该方法中绘制 UIElement 的 UI。以下是使用 DrawingContext 绘制一个 500x500 正方形的示例代码:

      // 重载 OnRender 调用以添加背景和边框到 OffSetPanel
      protected override void OnRender(DrawingContext dc){
          SolidColorBrush mySolidColorBrush  = new SolidColorBrush();
          mySolidColorBrush.Color = Colors.LimeGreen;
          Pen myPen = new Pen(Brushes.Blue, 10);
          Rect myRect = new Rect(0, 0, 500, 500);
          dc.DrawRectangle(mySolidColorBrush, myPen, myRect);
      }

      除了绘制正方形,DrawingContext 还提供了 DrawEllipse、DrawImage、DrawLine 等函数,用于绘制圆形、图像、线条等。比起直接使用 DrawText,DrawGeometry 更适合绘制文字边框。在将文字转换为 Geometry 后,可以直接调用 DrawGeometry 并添加边框:

      protected override void OnRender(DrawingContext drawingContext){
          base.OnRender(drawingContext);
          var geometry = CreateTextGeometry();
          // 根据设置的属性绘制轮廓。
          drawingContext.DrawGeometry(Foreground, new Pen(Stroke, StrokeThickness), geometry);
      }

      通过 Stroke 和 StrokeThickness 控制文字边框的颜色和粗细。

    4. 自定义 Shape

      微软的示例文档中介绍了前面的方法,但既然已经获得了文字的 Geometry,直接创建自定义的 Shape 可能会更合适。Shape 可以更容易地进行更多花样和动画。以下是使用自定义 Shape 实现空心文字的代码示例(省略了一些文本的自定义依赖属性):

      public class TextShape : Shape{
          private double _height;
          private double _width;
          private Geometry _textGeometry;
          [Localizability(LocalizationCategory.Text)]
          public string Text
          {
              get { return (string)GetValue(TextProperty); }
              set { SetValue(TextProperty, value); }
          }
          protected sealed override Geometry DefiningGeometry
          {
              get
              {
                  return _textGeometry ?? Geometry.Empty;
              }
          }
          protected override Size MeasureOverride(Size availableSize)
          {
              this.RealizeGeometry();
              return new Size(Math.Min(availableSize.Width, _width), Math.Min(availableSize.Height, _height));
          }
          private void RealizeGeometry()
          {
              var formattedText = new FormattedText(
                                  Text,
                                  CultureInfo.CurrentCulture,
                                  FlowDirection.LeftToRight,
                                  new Typeface(FontFamily, FontStyle, FontWeight, FontStretch), FontSize, Brushes.Black, 100);
              _height = formattedText.Height;
              _width = formattedText.Width;
              _textGeometry = formattedText.BuildGeometry(new Point());
          }
      }

      通过将文字转换为 Shape,除了实现文字描边,还可以实现多种动画效果,如下图所示:

      [WPF] 如何实现文字描边

    5. 最后

      本文介绍了如何在 WPF 中实现文字描边。除了文字描边,将文字转换为 Shape 还有很多其他玩法,下一篇文章将简单尝试其中的一些。

      此外,文字描边的另一种方案是参考博客园的博客,使用 GDI+ 生成 Bitmap,然后转换为 BitmapImage:

      WPF 文本描边+外发光效果实现

    6. 参考

      • Geometry 概述 - WPF .NET Framework
      • GeometryGroup 类 (System.Windows.Media)
      • FormattedText 类 (System.Windows.Media)
      • DrawingContext 类 (System.Windows.Media)
      • UIElement.OnRender(DrawingContext) 方法 (System.Windows)
    7. 源码

      源码可在 GitHub 上找到:https://github.com/DinoChan/wpf_design_and_animation_lab

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程
    相关文章 更多
    WPF通过 WM_COPYDATA 实现与Qt的进程间通信
    WPF通过 WM_COPYDATA 实现与Qt的进程间通信

    在开发中,我们有时需要让不同的框架程序(如 C# 的 WPF 和 C++ 的 Qt)进行实时数据交互。由于两者底层都运行在 Windows 系统上,利用 Win32 API 中的 WM_COPYDATA 消息是一种简单、高效且低延迟的解决方案。 接下来,我们将详细介绍如何通过 WM_COPYDATA

    WPF 多点漫游实现:纯数学计算方式解析
    WPF 多点漫游实现:纯数学计算方式解析

    在WPF中,除了使用Manipulation系列进行触摸的多点漫游外,还可以利用WPF提供的ManipulationProcessor2D纯数学库来实现多点漫游元素功能。这是一个位于System.Windows.Input.Manipulations命名空间内的独立WPF程序集。通过这个程序集,可以利用与WPF交互无关的纯数学计算方式实现多点漫游元素功能。只需向ManipulationProcessor2D提供多点的Id、时间和坐标信息,就可以利用Manipulatio

    WPF样式与模板区别与应用解析
    WPF样式与模板区别与应用解析

    样式用于统一控件的外观属性,模板则定义控件的内部结构,两者通过Style设置Template属性和TemplateBinding协同工作,实现灵活的UI定制。

    WPF树形数据绑定实现方法
    WPF树形数据绑定实现方法

    答案是通过定义包含ObservableCollection子节点集合和INotifyPropertyChanged支持的数据模型,结合HierarchicalDataTemplate的ItemsSource绑定子节点路径,实现WPF树形结构数据绑定。具体步骤包括:创建自引用的TreeNode类,其中Children为ObservableCollection类型以支持动态更新;在XAML中使用TreeView控件并设置ItemsSource绑定根节点集合;通过HierarchicalDataTemplate

    WPF跨窗口数据共享方法解析
    WPF跨窗口数据共享方法解析

    WPF跨窗口数据共享的常见模式包括:1.MVVM架构下通过共享服务或单例ViewModel实现解耦的数据交互;2.事件聚合器模式利用消息总线实现组件间松耦合通信;3.直接传递数据对象于窗口构造函数或属性中,适用于简单场景;4.静态类或单例存储全局状态,但易导致高耦合与测试困难。其中,推荐在复杂应用中采用MVVM结合共享服务的方式,通过UserService等中心化服务管理数据,确保所有ViewModel操作同一数据源,并借助INotifyPropertyChanged和ObservableCollecti

    WPF中DispatcherUnhandledException的作用是什么?
    WPF中DispatcherUnhandledException的作用是什么?

    DispatcherUnhandledException是WPF中用于全局捕获主线程未处理异常的机制,可通过订阅该事件记录错误、显示友好消息并设置e.Handled=true来防止应用崩溃;2.避免过度使用的方法是优先在局部用try-catch处理异常,仅将全局处理作为最后防线,用于无法预知或跨区域的异常场景;3.DispatcherUnhandledException与TaskScheduler.UnobservedTaskException的区别在于前者处理UI线程异常,后者处理未被await或Res

    UWP XAML响应式布局技巧解析
    UWP XAML响应式布局技巧解析

    响应式布局的概念是一个页面适配多个终端及不同分辨率。在针对特定屏幕宽度优化应用UI时,我们将此称为创建响应式设计。WPF设计之初响应式设计的概念并不流行,那时候大部分网页设计师都按着宽度960像素的标准设计。到了UWP诞生的时候响应式布局已经很流行了,所以UWP提供了很多响应式布局的技术,这篇文章简单总结了一些响应式布局常用的技术,更完整的内容请看文章最后给出的参考网站。1.传统的XAML如何适配不同分辨率所谓的传统,是指在响应式设计没流行前XAML就已经存在的应对不同分辨率的技术,毕竟桌面客户端常

    MVVMLight入门:概念与架构解析
    MVVMLight入门:概念与架构解析

    大家好,我是架构君,一个会编程也爱吟诗的架构师。今天分享MVVMLight学习笔记(一)—MVVMLight概述,希望对大家有所帮助!一、MVVM概述MVVM,即Model-View-ViewModel的缩写,其核心目标是将视图(View)与模型(Model)分离开来。MVVM结构示意如下:与传统将逻辑结构置于CodeBehind的做法相比,MVVM模式通过数据绑定和命令绑定,有效地解耦了视图和业务逻辑。ViewModel中的属性变更会通知到前端视图,确保前端实时更新。二、MVVMLight概述MVVM

    typora怎么高亮 文本标记语法设置
    typora怎么高亮 文本标记语法设置

    本教程演示如何在 Windows 版 Typora 中开启 Highlight 高亮功能,通过双等号语法标记重点文本,并展示如何编辑、取消高亮及验证源码保存状态。

    讯飞智作平台 在线创作功能介绍
    讯飞智作平台 在线创作功能介绍

    了解讯飞智作平台的在线创作流程:从文字配音到数字人视频生成,再到AIGC工具箱的素材处理。通过具体案例演示如何选择合适的功能入口、调整参数及核对成品权益,适合需要快速制作音频或播报视频的用户参考。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。