Windows Presentation Foundation 中的版式
更新:2007 年 11 月
本主题介绍 WPF 的主要版式功能。这些功能包括改进的文本呈现质量和性能、OpenType 版式支持、增强的国际文本、增强的字体支持和新的文本应用程序编程接口 (API)。
本主题包括下列各节。
- 改进的文本质量和性能
- 丰富的版式
- 增强的国际文本支持
- 增强的字体支持
- 新的文本应用程序编程接口 (API)
- 资源
- 相关主题
改进的文本质量和性能
WPF 中的文本是使用 Microsoft ClearType 呈现的,增强了文本的清晰度和可读性。ClearType 是由 Microsoft 开发的软件技术,这种技术提高了文本在现有 LCD(液晶显示器,如便携式计算机屏幕、Pocket PC 屏幕和平板监视器)上的可读性。ClearType 使用亚像素呈现技术,使字符在对齐时能够精确到一个像素的小数倍,从而以更高的逼真度显示文本的真实形状。额外的分辨率增加了文本显示中细节的清晰度,使其更便于长时间阅读。WPF 中 ClearType 的另一个改进是可以朝 Y 轴方向消除锯齿,使文本字符中的平缓曲线的顶端和底端变得平滑。有关 ClearType 功能的详细信息,请参见 ClearType 概述。
使用 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 功能的详细信息,请参见 OpenType 字体功能。
增强的国际文本支持
WPF 通过提供下列功能来提供增强的国际文本支持:
使用自适应测量功能,在所有书写系统中实现自动行距调整。
对国际文本的广泛支持。有关更多信息,请参见 Windows Presentation Foundation 全球化。
根据不同的语言进行分行、连字和对齐。
增强的字体支持
WPF 通过提供下列功能来提供增强的字体支持:
所有文本均采用 Unicode。字体行为和选择不再需要字符集或代码页。
字体行为与全局设置(如系统区域设置)无关。
独立的 FontWeight、FontStretch 和 FontStyle 类型用于定义 FontFamily,因此其灵活性高于 Win32 编程(在这种编程环境中,将使用斜体和粗体的布尔组合来定义字体系列)。
在处理书写方向(横向与纵向)时不受字体名称的影响。
使用复合字体技术,在可移植 XML 文件中链接和回退字体。使用复合字体可以构造全面的多语言字体。复合字体还提供一种可避免显示缺失标志符号的机制。有关更多信息,请参见 FontFamily 类中的备注。
使用一组单语言字体,根据复合字体生成国际字体。在开发多语言字体时,该功能可节省资源成本。
在文档中嵌入复合字体,从而能够提供文档可移植性。有关更多信息,请参见 FontFamily 类中的备注。
新的文本应用程序编程接口 (API)
WPF 提供了多个文本 API,开发人员可以使用它们在其应用程序中包括文本。这些 API 按以下三个类别进行分组:
布局和用户界面。图形用户界面 (GUI) 的常见文本控件。
轻量文本绘制。允许您直接在对象上绘制文本。
高级文本格式。允许您实现自定义文本引擎。
布局和用户界面
文本 API 是最高级的功能,它提供常见的用户界面 (UI) 控件,如 Label、TextBlock 和 TextBox。这些控件提供应用程序中的基本 UI 元素,并提供一种表示文本和与文本交互的简便方法。RichTextBox 和 PasswordBox 等控件启用了更高级或更专业的文本处理。TextRange、TextSelection 和 TextPointer 等类启用了有用的文本操作。这些 UI 控件提供 FontFamily、FontSize 和 FontStyle 等属性,用于控制呈现文本时使用的字体。
使用位图效果、转换和文本效果
通过 WPF,可以借助位图效果、转换和文本效果等功能,来创建悦目的文本用法。下面的示例显示了应用于文本的典型类型的投影效果。
使用了投影的文本
下面的示例显示了应用于文本的投影效果和噪音。
使用了投影和噪音的文本
下面的示例显示了应用于文本的外部发光效果。
使用了外部发光效果的文本
下面的示例显示了应用于文本的模糊效果。
使用了模糊效果的文本
下面的示例显示了三行文本,将第一行文本沿着 X 轴放大 150% 得到第二行文本,沿着 Y 轴放大 150% 得到第三行文本。
使用 ScaleTransform 的文本
下面的示例显示了沿 X 轴扭曲的文本。
使用 SkewTransform 的文本
TextEffect 对象是一个帮助器对象,使用该对象可将文本作为文本字符串中的一组或多组字符进行处理。下面的示例摘自 TextEffect 示例,其中显示了发生旋转的单个字符。每个字符都将以 1 秒为间隔单独旋转。
旋转文本效果动画示例
使用流文档
除了常见的 UI 控件外,WPF 还提供用于呈现文本的布局控件 - FlowDocument 元素。FlowDocument 元素与 DocumentViewer 元素结合使用时,可为大量具有不同布局要求的文本提供控件。布局控件通过其他 UI 控件的 Typography 对象和字体相关属性来提供对高级版式的访问权限。
下面的示例显示了 FlowDocumentReader 中承载的文本内容,该元素支持搜索、导航、分页和内容缩放。
FlowDocumentReader 中承载的文本
有关更多信息,请参见 Windows Presentation Foundation 中的文档。
轻量文本绘制
您可以通过使用 DrawingContext 对象的 DrawText 方法直接在 WPF 对象上绘制文本。若要使用此方法,请创建一个 FormattedText 对象。使用该对象可以绘制多行文本,对于多行文本中的每个字符可以单独设置格式。FormattedText 对象的功能包含 Win32 API 中 DrawText 标志的许多功能。另外,FormattedText 对象包含省略号支持(当文本超过其边界时,会显示省略号)之类的功能。下面的示例显示了应用多种格式的文本,其中第二个和第三个单词应用了线性渐变。
使用 FormattedText 对象显示的文本
您可以将带有格式的文本转换为 Geometry 对象,这样便可以创建其他类型的悦目文本。例如,可以基于文本字符串的轮廓创建 Geometry 对象。
使用线性渐变画笔的文本轮廓
下面的几个示例说明了几种通过修改已转换文本的笔画、填充和高光点来创建悦目效果的方法。
将笔画和填充设置为不同颜色的示例
应用于笔画的图像画笔的示例
应用于笔画和高光点的图像画笔的示例
有关 FormattedText 对象的更多信息,请参见绘制格式化文本。
高级文本格式
WPF 是最高级的文本 API,它使您能够通过使用 System.Windows.Media.TextFormatting 命名空间中的 TextFormatter 对象和其他类型来创建自定义的文本布局。使用 TextFormatter 和关联类可以实现自定义的文本布局,以支持您为国际文本定义的字符格式、段落样式、换行规则和其他布局功能。只有在极少数情况下才需要重写默认情况下实现的 WPF 文本布局支持。但是,如果要创建文本编辑控件或应用程序,则可能需要非默认的 WPF 实现。
与传统文本 API 不同的是,TextFormatter 通过一组回调方法来与文本布局客户端交互。它要求客户端在 TextSource 类的实现中提供这些方法。下面的关系图说明了客户端应用程序和 TextFormatter 之间的文本布局交互。
应用程序和 TextFormatter 之间的交互
有关创建自定义文本布局的详细信息,请参见高级文本格式设置。
资源
如需了解 OpenType 功能,一个有用的方法就是使用 XamlPad 创建标记以体验不同版式属性的用法。有关更多信息,请参见 XAMLPad。
使用 XamlPad 测试 OpenType 字体