【WPF.NET开发】WPF中的版式

本文内容

  1. 改进的文本质量和性能
  2. 丰富的版式
  3. 增强的国际文本支持
  4. 增强的字体支持
  5. 新的文本应用程序编程接口 (API)

本主题介绍 WPF 的主要版式功能。 这些功能包括改进的文本呈现质量和性能、OpenType 版式支持、增强的国际文本、增强的字体支持和新的文本应用程序编程接口 (API)。

1、改进的文本质量和性能

WPF 中的文本通过 Microsoft ClearType 呈现,该技术增强了文本的清晰度和可读性。 ClearType 是一种由 Microsoft 开发的软件技术,可提高现有 LCD(液晶显示器,如笔记本电脑屏幕、Pocket PC 屏幕和平板显示器)上文本的可读性。 ClearType 使用亚像素呈现技术,通过将字符对齐到像素的小数部分,以更高的保真度显示文本的真实形状。 超高的分辨率增加了文本显示中细节的清晰度,使其更便于长时间阅读。 WPF 中 ClearType 的另一个改进是可以朝 Y 轴方向抗锯齿,使文本字符中平缓曲线的顶端和底端变得平滑。 

text-y-direction-antialiasing.gif?view=netframeworkdesktop-4.8


采用 ClearType y 向抗锯齿的文本

所有文本呈现管道都可以在 WPF 中实现硬件加速,前提是计算机满足所需硬件的最低要求。 不能使用硬件执行加速的呈现会退回软件呈现。 硬件加速会影响文本呈现管道的所有阶段 - 从存储单个字形、将字形组成字形串、应用效果,到向最终显示输出应用 ClearType 混合算法。 

text-rendering-pipeline.png?view=netframeworkdesktop-4.8

此外,动画文本(无论是按字符还是按字形进行动画处理)可充分利用由 WPF 启用的图形硬件功能。 因此,可生成平滑的文本动画。

2、丰富的版式

OpenType 字体格式是 TrueType® 字体格式的扩展。 OpenType 字体格式由 Microsoft 和 Adobe 共同开发,可提供多种高级版式功能。 Typography 对象公开了 OpenType 字体的许多高级功能,如样式备用项和花体。 Windows SDK 提供了一组具有丰富特色的 OpenType 字体示例,如 Pericles 和 Pescadero 字体。 

Pericles OpenType 字体包含其他字形,可为标准自行集提供样式备用项。 以下文本显示样式备用字形。

opentype-stylistic-alternate-glyphs.gif?view=netframeworkdesktop-4.8

花体是使用精美修饰的装饰性字形,通常与书法相关。 以下文本显示 Pescadero 字体的标准和花体字形。

opentype-standard-swash-glyphs.gif?view=netframeworkdesktop-4.8

3、增强的国际文本支持

WPF 通过提供下列功能来提供增强的国际文本支持:

  • 使用自适应测量功能,在所有书写系统中实现自动行距调整。

  • 对国际文本的广泛支持。 

  • 根据不同的语言进行分行、连字和对齐。

4、增强的字体支持

WPF 通过提供下列功能来提供增强的字体支持:

  • 所有文本均采用 Unicode。 字体行为和选择不再需要字符集或代码页。

  • 字体行为与全局设置(如系统区域设置)无关。

  • 将 FontWeight、FontStretch 和 FontStyle 类型分开以定义 FontFamily。 因此其灵活性高于 Win32 编程(在这种编程环境中,使用斜体和粗体的布尔组合来定义字体系列)。

  • 在处理书写方向(横向与纵向)时不受字体名称的影响。

  • 使用复合字体技术,在可移植 XML 文件中链接和回退字体。 使用复合字体可以构造全面的多语言字体。 复合字体还提供一种可避免显示缺失字形的机制。 

  • 使用一组单语言字体,根据复合字体生成国际字体。 在开发多语言字体时,该功能可节省资源成本。

  • 在文档中嵌入复合字体,从而能够提供文档可移植性。 

5、新的文本应用程序编程接口 (API)

WPF 提供了多种文本 API 供开发人员在其应用程序中包括文本时使用。 这些 API 分为以下三类:

  • 布局和用户界面。 图形用户界面 (GUI) 的常见文本控件。

  • 轻量文本绘制。 可直接在对象上绘制文本。

  • 高级文本格式设置。 可实现自定义文本引擎。

布局和用户界面

在最高级别的功能中,文本 API 提供常见的 UI 控件,例如 Label、TextBlock 和 TextBox。 这些控件提供应用程序中的基本 UI 元素,并提供一种表示文本和与文本交互的简便方法。 RichTextBox 和 PasswordBox 等控件可实现更高级或更专业的文本处理。 TextRange、TextSelection 和 TextPointer 等类支持有用的文本操作。 这些 UI 控件提供 FontFamily、FontSize 和 FontStyle 等属性,用于控制呈现文本时使用的字体。

使用位图效果、转换和文本效果

通过 WPF,可以借助位图效果、转换和文本效果等功能,来创建悦目的文本用法。 下面的示例演示了应用于文本的典型类型的投影效果。

drop-shadow-text-effect.jpg?view=netframeworkdesktop-4.8

下面的示例演示了应用于文本的投影效果和噪音。

drop-shadow-noise-text.jpg?view=netframeworkdesktop-4.8

下面的示例演示了应用于文本的外发光效果。

text-shadow-glow-effect.jpg?view=netframeworkdesktop-4.8

以下示例显示了应用于文本的模糊效果。

text-shadow-blur-effect.jpg?view=netframeworkdesktop-4.8

下面的示例演示沿 X 轴放大 150% 得到第二行文本,沿 Y 轴放大 150% 得到第三行文本。

scaled-text-scaletransform.jpg?view=netframeworkdesktop-4.8

以下示例演示沿 X 轴倾斜的文本。

skewed-transformed-text.jpg?view=netframeworkdesktop-4.8

TextEffect 对象是一个帮助器对象,使用该对象可将文本作为文本字符串中的一组或多组字符进行处理。 下面的示例演示发生旋转的单个字符。 每个字符都将以 1 秒为间隔单独旋转。

rotating-text-effect.jpg?view=netframeworkdesktop-4.8

使用流文档

除了常见的 UI 控件,WPF 还提供用于文本呈现的布局控件—FlowDocument 元素。 FlowDocument 元素与 DocumentViewer 元素结合使用,为具有不同布局要求的大量文本提供控件。 布局控件通过其他 UI 控件的 Typography 对象和字体相关属性提供对高级版式的访问。

以下示例演示 FlowDocumentReader 中承载的文本内容,该元素支持搜索、导航、分页和内容缩放。

typography-text-flowdocumentreader.png?view=netframeworkdesktop-4.8

轻量文本绘制

你可以通过使用 DrawingContext 对象的 DrawText 方法直接在 WPF 对象上绘制文本。 若要使用此方法,请创建一个 FormattedText 对象。 使用该对象可以绘制多行文本,可对文本中的每个字符单独设置格式。 FormattedText 对象的功能包含 Windows API 中 DrawText 标志的许多功能。 另外,FormattedText 对象包含省略号支持(当文本超过其边界时,会显示省略号)之类的功能。 下面的示例演示应用多种格式的文本,其中第二个和第三个单词应用了线性渐变。

text-formatted-linear-gradient.jpg?view=netframeworkdesktop-4.8

可将格式化文本转换为 Geometry 对象,这样便可以创建其他类型的悦目文本。 例如,可基于文本字符串的轮廓创建 Geometry 对象。

text-outline-linear-gradient.jpg?view=netframeworkdesktop-4.8

以下示例说明了几种通过修改已转换文本的笔划、填充和突出显示来创建悦目的视觉效果的方法。

fill-stroke-text-effect.jpg?view=netframeworkdesktop-4.8

image-brush-application.jpg?view=netframeworkdesktop-4.8

image-brush-text-application.jpg?view=netframeworkdesktop-4.8

高级文本格式设置

WPF 是最高级的文本 API,可以通过使用 System.Windows.Media.TextFormatting 命名空间中的 TextFormatter 对象和其他类型来创建自定义的文本布局。 使用 TextFormatter 和关联类可以实现自定义的文本布局,支持为国际文本自定义字符格式、段落样式、换行规则,和其他布局功能。 只有在极少数情况下才需要重写 WPF 文本布局支持的默认实现。 但是,如果要创建文本编辑控件或应用程序,则可能需要非默认的 WPF 实现。

与传统文本 API 不同,TextFormatter 通过一组回叫方法与文本布局客户端交互。 它要求客户端在 TextSource 类的实现中提供这些方法。 下图说明了客户端应用程序和 TextFormatter 之间的文本布局交互。

text-layout-text-formatter-interaction.png?view=netframeworkdesktop-4.8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE好看的个人博客源码

文章目录 1.设计来源1.1 首页界面1.2 我的日记界面1.3 我的文章界面1.3.1 文章列表1.3.2 文章时间轴1.3.3 文章详细 1.4 我的相册界面1.5 我的源码界面1.6 认识我界面 2.效果和源码2.1 动态效果2.2 源码目录结构 源码下载 作者:xcLeigh 文章地址:https:/…

从头安装与使用一个docker GPU环境

GPU版docker的安装与使用 欢迎使用GPU版docker安装使用说明使用官方教程安装docker新建一个GPU版docker环境调用docker环境执行本地python文件 欢迎使用GPU版docker安装使用说明 使用官方教程安装docker 导入源仓库的GPG key curl -fsSL https://download.docker.com/linux/…

【计算机组成原理】期末复习试卷

目录 第一套试卷 第一套答案 第二套试卷 第二套答案 第三套试卷 第四套试卷 剩余试卷下载 第一套试卷 一、选择题(共20分,每题1分) 1.冯诺伊曼机工作方式的基本特点是______。 A.多指令流单数据流; B&#…

03MARL-联合策略与期望回报

文章目录 前言一、MARL问题组成二、联合策略与期望回报1.History-based expected return2.Recursive expected return 前言 多智能体强化学习问题中的博弈论知识——联合策略与期望回报 一、MARL问题组成 二、联合策略与期望回报 定义一种普遍的期望回报,能够用于…

多线程——阻塞队列

什么是阻塞队列 相比于一般的队列,有两个特点 1.线程安全 2.带有阻塞功能 1)队伍为空时,出队列就会出现阻塞,阻塞到其他线程入队列为止 2)队伍为满时,入队列就会出现阻塞,阻塞到其他线程出队列…

九州金榜|15岁初三男孩抑郁休学摆烂打游戏,高压教育要不得!

有一次和朋友一块聚餐,邻座是一位妈妈、和她大概七八岁的儿子,小男孩长得很帅气,没有像同龄人那样调皮捣乱,而是和妈妈很温馨的就餐。 看的出来一家人的素质很高,就餐过程中桌面保持的很整洁,交流声音也不…

你和家酿啤酒的距离,只差一台爱咕噜智能啤酒机

喝过工业啤酒,喝过精酿啤酒,但是你喝过在家自酿的啤酒吗? 啤酒是世界上消耗较多的饮料之一,而我国的啤酒年消耗量位居世界第一。近年来,随着越来越多的精酿啤酒涌入市场,精酿啤酒的概念与文化被更多消费者…

揭秘小米手机被疯狂吐槽的存储扩容技术

前段时间,在小米14的发布会上,雷布斯公布了名为“Xiaomi Ultra Space存储扩容”的技术,号称可以在512G的手机中再搞出来16G,256G的手机中再搞出8G。对于普通用户来说,能多得一些存储空间,无异是个很好的福利…

PID横向控制和仿真实现

文章目录 1. PID介绍2. PID横向控制原理3. 算法和仿真实现 1. PID介绍 PID是一种常见的控制算法,全称为Proportional-Integral-Derivative,即比例-积分-微分控制器。PID控制器是一种线性控制器,它将设定值与实际值进行比较,根据误…

Python轴承故障诊断 (11)基于VMD+CNN-BiGRU-Attenion的故障分类

目录 往期精彩内容: 前言 模型整体结构 1 变分模态分解VMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 故障VMD分解可视化 2.3 故障数据的VMD分解预处理 3 基于VMD-CNN-BiGRU-Attenion的轴承故障诊断分类 3.1 定义VMD-CNN-BiGRU-Attenion分类网…

【C#】当重复使用一段代码倒计时时,使用静态类和静态方法,实现简单的this扩展方法

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

多特征变量序列预测(三)——CNN-Transformer风速预测模型

目录 往期精彩内容: 前言 1 多特征变量数据集制作与预处理 1.1 导入数据 1.2 数据集制作与预处理 2 基于Pytorch的CNN-Transformer 预测模型 2.1 定义CNN-Transformer预测模型 2.2 设置参数,训练模型 3 模型评估与可视化 3.1 结果可视化 3.2 …

高效构建Java应用:Maven入门和进阶(五)

高效构建Java应用:Maven入门和进阶(五) Maven实战案例:搭建微服务Maven工程框架5.1 项目需求和结构分析5.2项目搭建和统一构建 总结 Maven实战案例:搭建微服务Maven工程框架 5.1 项目需求和结构分析 需求案例&#xf…

SSH镜像、systemctl镜像、nginx镜像、tomcat镜像

目录 一、SSH镜像 二、systemctl镜像 三、nginx镜像 四、tomcat镜像 五、mysql镜像 一、SSH镜像 1、开启ip转发功能 vim /etc/sysctl.conf net.ipv4.ip_forward 1sysctl -psystemctl restart docker 2、 cd /opt/sshd/vim Dockerfile 3、生成镜像 4、启动容器并修改ro…

【编码魔法师系列_构建型4】原型模式(Prototype Pattern)

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通…

10.抽象工厂模式

江湖上再也没人找林家的麻烦了。因为林平之一怒之下将辟邪剑谱公诸天下。一下子印出去几万份,江湖上人人都能轻而易举的得到这本无尚武学;然而江湖人士却陷入深深的矛盾之中: 不练,别人练了,分分钟秒杀你;练…

SV-7041T 30W网络有源音箱校园教室广播音箱,商场广播音箱,会议广播音箱,酒店广播音箱,工厂办公室广播音箱

SV-7041T 30W网络有源音箱 校园教室广播音箱,商场广播音箱,会议广播音箱,酒店广播音箱,工厂办公室广播音箱 SV-7041T是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱,具有10/100M以太网接口,可将…

我为什么要写RocketMQ消息中间件实战派上下册这本书?

我与RocketMQ结识于2018年,那个时候RocketMQ还不是Apache的顶级项目,并且我还在自己的公司做过RocketMQ的技术分享,并且它的布道和推广,还是在之前的首席架构师的带领下去做的,并且之前有一个技术神经质的人&#xff0…

爬虫入门学习(二)——response对象

大家好!我是码银,代码的码,银子的银🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 前言 在本篇文章,我们继续讨论request模块。从上一节(爬虫学习(1)--reque…

【C++】异常机制

异常 一、传统的处理错误的方式二、C异常概念三、异常的使用1. 异常的抛出和捕获(1)异常的抛出和匹配原则(2)在函数调用链中异常栈展开匹配原则 2. 异常的重新抛出3. 异常安全4. 异常规范 四、自定义异常体系五、C 标准库的异常体…