WPF 中的版式

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

改进了文本的质量和性能

WPF 中的文本使用 Microsoft ClearType 呈现,从而提高文本的清晰度和可读性。 ClearType 是由 Microsoft 开发的一种软件技术,可提高现有 LCD(液晶显示器)上的文本可读性,例如笔记本电脑屏幕、口袋电脑屏幕和面板监视器。 ClearType 使用亚像素呈现技术,通过将字符对齐到像素的小数部分,以更高的保真度显示文本的真实形状。 额外的分辨率增加了文本显示中微小细节的锐度,使长时间阅读变得更加容易。 在 WPF 中,ClearType 的另一个改进是 y 方向的抗锯齿技术,可以使文本字符中浅曲线的顶部和底部更加平滑。 有关 ClearType 功能的更多详细信息,请参阅 ClearType 概述

采用 ClearType y 向抗锯齿的文本
采用 ClearType y 向抗锯齿的文本

如果计算机满足所需的最低硬件级别,整个文本呈现管道在 WPF 中可以通过硬件加速。 不能使用硬件执行加速的呈现会退回软件呈现。 硬件加速会影响文本呈现管道的所有阶段,从存储单个字形、组合字形到字形运行、应用效果、将 ClearType 混合算法应用到最终显示的输出。 有关硬件加速的详细信息,请参阅 图形呈现层

文本的呈现管道关系图

此外,动画文本(无论是按字符还是按字形进行动画处理)可充分利用由 WPF 启用的图形硬件功能。 这会导致文本动画流畅。

丰富的版式

OpenType 字体格式是 TrueType® 字体格式的扩展。 OpenType 字体格式由 Microsoft 和 Adobe 共同开发,并提供丰富的高级版式功能。 Typography 对象公开了 OpenType 字体的许多高级功能,例如风格替换和花式字符。 Windows SDK 提供了一组示例 OpenType 字体,这些字体具有丰富的功能,例如 Pericles 和 Pescadero 字体。 有关详细信息,请参阅 示例 OpenType 字体包

Pericles OpenType 字体包含其他字形,这些字形为标准字形集提供风格替代。 以下文本显示样式备用字形。

使用 OpenType 样式替代字形的文本

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

使用 OpenType 标准和花体连字的文本

有关 OpenType 功能的更多详细信息,请参阅 OpenType 字体功能

增强的国际文本支持

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

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

  • 对国际文本的广泛支持。 有关详细信息,请参阅 WPF 的全球化

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

增强字体支持

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

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

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

  • 区分 FontWeightFontStretchFontStyle 类型以定义 FontFamily。 这比 Win32 编程更灵活,其中斜体和粗体布尔组合用于定义字体系列。

  • 书写方向(水平与垂直)处理与字体名称无关。

  • 使用复合字体技术在便携式 XML 文件中进行字体链接和字体回退。 复合字体允许构建全范围的多语言字体。 复合字体还提供一种机制,可避免显示缺失字形。 有关详细信息,请参阅 FontFamily 类中的备注。

  • 使用一组单语言字体,根据复合字体生成国际字体。 在开发多种语言的字体时,这样可以节省资源成本。

  • 文档中嵌入的复合字体,从而提供文档可移植性。 有关详细信息,请参阅 FontFamily 类中的备注。

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

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

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

  • 轻量文本绘制。 允许将文本直接绘制到对象。

  • 高级文本格式。 允许实现自定义文本引擎。

布局和用户界面

在功能最高级别,文本 API 提供常见的 UI 控件,如 LabelTextBlockTextBox。 这些控件提供应用程序中的基本 UI 元素,并提供一种简单的方式来呈现和与文本交互。 RichTextBoxPasswordBox 等控件可实现更高级的或专用的文本处理。 类(如 TextRangeTextSelectionTextPointer)支持有用的文本操作。 这些 UI 控件提供 FontFamilyFontSizeFontStyle等属性,使你能够控制用于呈现文本的字体。

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

WPF 允许通过使用位图效果、转换和文本效果等功能创建具有视觉上有趣的文本用途。 以下示例演示应用于文本的典型投影效果类型。

Softness 为 0.25 的文本阴影

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

带有噪音的文本阴影

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

使用 OuterGlowBitmapEffect 的文本阴影

下面的示例演示应用于文本的模糊效果。

使用 BlurBitmapEffect 文本阴影

以下示例显示了沿 x 轴缩放 150% 的第二行文本,第三行文本沿 y 轴缩放 150%。

使用 ScaleTransform 缩放文本

以下示例显示沿 x 轴倾斜的文本。

使用 SkewTransform 扭曲的文本

TextEffect 对象是一个帮助程序对象,可用于将文本视为文本字符串中的一组或多组字符。 下面的示例演示发生旋转的单个字符。 每个字符以 1 秒间隔独立旋转。

旋转文本效果的屏幕截图

使用流文档

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

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

显示 OpenType 字体的屏幕截图。

有关详细信息,请参阅 WPF中的 文档。

轻量文本绘制

可以使用 DrawingContext 对象的 DrawText 方法直接将文本绘制到 WPF 对象上。 若要使用此方法,请创建 FormattedText 对象。 此对象允许你绘制多行文本,其中文本中的每个字符可以单独设置格式。 FormattedText 对象的功能包含 Windows API 中 DrawText 标志的大部分功能。 此外,FormattedText 对象包含省略号支持等功能,其中在文本超出其边界时显示省略号。 以下示例展示了应用多种格式的文本,其中包括对第二个和第三个单词应用的线性渐变。

使用 FormattedText 对象显示的文本

可以将格式化文本转换为 Geometry 对象,从而创建其他类型的视觉有趣的文本。 例如,可以根据文本字符串的轮廓创建 Geometry 对象。

使用线性渐变画笔的文本轮廓

以下示例演示了通过修改转换后文本的笔划、填充和突出显示来创建有趣的视觉效果的几种方法。

文本使用不同颜色来填充和描边

笔画应用了图像画笔的文本

笔画和突出显示应用了图像画笔的文本

有关 FormattedText 对象的详细信息,请参阅 绘图格式化文本

高级文本格式

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

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

文本布局客户端和文本格式器示意图

有关创建自定义文本布局的更多详细信息,请参阅 高级文本格式

另请参阅