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

news2024/11/17 15:37:30

本文内容

  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.coloradmin.cn/o/1385271.html

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

相关文章

SpringMVC RESTful案例

文章目录 1、准备工作2、功能清单3、具体功能:访问首页a>配置view-controllerb>创建页面 4、具体功能:查询所有员工数据a>控制器方法b>创建employee_list.html 5、具体功能:删除a>创建处理delete请求方式的表单b>删除超链接…

多元化的App封装打包平台,解锁应用发布效率

在数字化时代,移动应用已成为连接用户与服务的重要桥梁。对于开发者而言,将应用从代码转化为用户可以直接下载安装的产品,这一过程的效率和质量至关重要。App封装打包平台的出现,为开发者提供了便捷的应用构建、测试和分发解决方案…

Robot Framework之python脚本调用

目录 目录结构 ​编辑 Python函数作为关键字 一、通过Import Library关键字在*** Test Cases ***中引用python脚本 ​编辑 二、通过Library关键字在*** Settings ***中引入python脚本 Python类作为测试库 一、通过Library关键字在*** Settings ***引入python脚本中的类 …

机器学习_7、KNN

数据采用:电离层数据 KNN完整的代码电离层数据资源-CSDN文库 代码 import os import csv import numpy as np from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import …

DNS域名解析协议

文章目录 DNS域名解析协议一、DNS系统的作用1、DNS的定义2、DNS域名解析2.1 正向解析2.2 反向解析 3、DNS域名结构 二、DNS服务器类型1、主域名服务器2、从域名服务器3、缓存域名服务器4、权威dns服务器 三、DNS查询类型及原理1、查询方式1.1 递归查询1.2 迭代查询 2、DNS查询原…

墙地砖外形检测的技术方案-图像增强

基础理论 本例中使用漫射场光源,在采集图像的过程中,更容易可能会受环境中光源照射不足的可能性,导致采集的图像对比度不足,图像视觉效果较暗。可通过直方图均衡化或者直方图规定化。利用直方图规定化进行图像增强。 案例图片 如…

实例分割论文精读:Mask R-CNN

1.摘要 本文提出了一种概念简单、灵活、通用的实例分割方法,该方法在有效地检测图像中的物体同时,为每个物体实例生成一个实例分割模板,添加了一个分支,用于预测一个对象遮罩,与现有的分支并行,用于边界框…

node各个版本的下载地址

下载地址: https://nodejs.org/dist/ 可以下载多个版本,使用nvm控制切换(需要先安装nvm再安装node) nvm下载地址(访问的是github,请科学上网,下载后解压安装exe即可):h…

【leetcode题解C++】54.螺旋矩阵I and 59.螺旋矩阵II

54.螺旋矩阵I 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入:m…

通俗易懂实现功能强大的实战项目 springboot+java+vue+mysql 汽车租赁管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

如何在免费云Colab上使用扩散模型生成图片?

前言 在人工智能技术的迅猛发展下,内容生成领域也迎来了一系列创新的突破。其中,使用扩散模型(如Stable Diffusion)从文字生成图片的AI技术备受瞩目。这一技术的出现,为我们创造栩栩如生的图像提供了全新的可能性。本…

ceph、gluster、longhorn选型对比

Ceph Ceph是一个分布式的存储系统,可以在统一的系统中提供唯一的对象、块和文件存储。 名词解释: RADOS: 由自我修复、自我管理、智能存储节点组成的可靠、自主、分布式对象存储LIBRADOS: 一个允许应用程序直接访问 RADO 的库&…

机器学习 | 无监督聚类K-means和混合高斯模型

机器学习 | 无监督聚类K-means和混合高斯模型 1. 实验目的 实现一个K-means算法和混合高斯模型,并用EM算法估计模型中的参数。 2. 实验内容 用高斯分布产生 k k k个高斯分布的数据(不同均值和方差)(其中参数自己设定&#xff…

网络分流规则

现在的网络是越来越复杂。 有必要进行分流。 有一些geosite.dat是已经整理好的,包含许多的网站的分类: 分流规则: route规则 主要是: {"type": "field","outboundTag": "direct","domain&quo…

【Windows】你不能访问此共享文件夹,因为你的组织安全策略...解决方法

WinR键打开运行窗口,输入gpedit.msc进入本地组策略编辑器。 找到计算机配置,然后点击管理模板,找到网络,然后点击lanman工作站,将右侧窗口中的启用不安全的来吧登录开启就解决了 设置为已启用,应用后确定&a…

定时器--JAVA

定时器是软件开发中的一个重要组件,类似于一个"闹钟"当达到一个设定的时间之后,就执行某个指定好的代码(任务)。 Timer JAVA标准库中已经为我们实现了一个定时器,我们直接new就行了。 Timer timer new Timer(); Timer类中最重要的一个方法…

Fine-tuning:个性化AI的妙术

随着人工智能(AI)技术的迅猛发展,Fine-tuning作为一项重要而神奇的技术崭露头角。Fine-tuning俗称“微调技术。其本质上是对已有模型进行能力的迁移学习扩展,由于重新训练神经网络模型的成本太高,所以使用微调技术可以…

GZ075 云计算应用赛题第8套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷8 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenSt…

MySQL——深入数据库原理(事务及锁)

文章目录 锁行级锁共享 (S) 锁排他 (X) 锁间隙锁 表级锁意向锁自增锁Lock Table/DDL 事务ACID 原则1. 原子性 A2. 一致性 C3. 隔离性 I4. 持久性 D 隔离级别1. READ UNCOMMITTED(未提交读)2. READ COMMITTED(提交读)3. REPEATABLE…

强化学习应用(五):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…