6

我正在开发一个 WPF 应用程序,但我注意到在某些字体大小下,文本的呈现效果不如您在控制面板-> 字体中看到的示例。我正在使用大的 Segoe UI 字体 ( FontSize="36"),效果在直立线条上更明显,例如字母“U”的一侧可能比另一侧稍厚。)。

在某些字体大小下,字体质量会有所提高,例如FontSize="48"(我认为相当于 36pt),但使用有限数量的字体大小并不总是可行的。

我可以通过将以下属性应用于 TextBlock 来提高字体质量:-

TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType"

鉴于质量的提高,我很想知道为什么 WPF 不对所有文本执行此操作,还是归结为性能?我正在考虑创建一种全局样式以将其应用于所有控件,或者这会导致问题吗?

(我尝试上传屏幕截图,但必须以低质量存储图像,您无法真正找出字体问题)。

4

2 回答 2

12

这是WPF 文本团队撰写的关于此功能的博客文章。

注意事项TextFormattingMode

理想的理想文本度量是自引入 WPF 以来一直用于格式化文本的度量。这些指标导致字形的形状与字体文件中的轮廓保持高保真度。在创建字形位图或相对于彼此定位字形时,不会考虑字形的最终位置。

显示在这种新的格式化模式下,WPF 使用 GDI 兼容的文本度量。这确保了每个字形都具有多个整像素的宽度,并且定位在整像素上。使用 GDI 兼容的文本度量也意味着字形大小和换行符类似于基于 GDI 的框架。也就是说,字形大小并不是 WPF 使用的换行算法的唯一输入。即使我们使用与 GDI 相同的指标,我们的换行也不会完全相同。

由于这些属性是.NET 4.0 中的属性,因此它们将原始 WPF 算法保留为默认值,即理想模式。

为了TextRenderingMode

自动此模式将使用 ClearType,除非系统设置已设置为专门禁用机器上的 ClearType。

Aliased没有抗锯齿将用于绘制文本。

灰度灰度抗锯齿将用于绘制文本。

ClearType ClearType 抗锯齿将用于绘制文本。

由于Auto是默认设置,您通常会得到ClearType渲染。

现在,因为这些是附加属性,并且它们继承,所以您可以将它们设置在 root Window。无需创建一堆Styles。

于 2013-08-06T21:50:20.387 回答
0

当 ClearType 打开时,在处理大量数据(超过 10,000 个项目)时,我注意到了一些小的性能问题。将 TextFormattingMode 更改为 Display 对性能没有明显影响。

这就是说,在我所有的 WPF 应用程序中,我使用全局样式来改进文本呈现,除非性能影响大到足以使 UI 感觉粘滞。

于 2013-08-10T20:20:21.480 回答