我正在开发一个WPF应用程序,但我注意到在某些字体大小下,文本的渲染效果不如您在控制面板中看到的样本 - >字体。我正在使用大型Segoe UI字体(FontSize="36"
),并且直立线上的效果更明显,例如字母“U”的一侧可能比另一侧略厚。
)。
某些字体大小的字体质量有所改善,例如FontSize="48"
(我认为相当于36pt),但使用有限数量的字体大小并不总是实用的。
我可以通过将以下属性应用于TextBlock来提高字体质量: -
TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType"
鉴于质量有所提高,我很想知道为什么WPF不会为所有文本执行此操作,或者是性能下降?我正在考虑创建一个全局样式以将其应用于所有控件,或者这会导致问题吗?
(我尝试上传屏幕截图,但SO必须以低质量存储图片,而您无法确定字体问题。)
答案 0 :(得分:11)
以下是WPF Text团队撰写的有关此功能的blog post。
TextFormattingMode
注意:
理想理想的文字指标是已经习惯的指标 自WPF引入以来格式化文本。这些指标导致 字形的形状保持高保真度,其轮廓来自 字体文件。当时,字形的最终位置不会被考虑在内 创建字形位图或相对于每个字形定位字形 其他
显示在这种新的格式化模式下,WPF使用GDI 兼容的文本指标。这可确保每个字形的宽度为 多个整像素,位于整个像素上。指某东西的用途 兼容GDI的文本度量标准也意味着字形大小和行 break类似于基于GDI的框架。也就是说,字形大小 不是WPF使用的换行算法的唯一输入。 即使我们使用与GDI相同的指标,我们的突破也不会 完全一样。
由于这些属性在.NET 4.0中是 new ,因此它们将原始WPF算法保留为默认模式,即理想模式。
对于TextRenderingMode
自动除非已进行系统设置,否则此模式将使用ClearType 设置为在机器上专门禁用ClearType。
别名不会使用抗锯齿来绘制文字。
灰度灰度抗锯齿将用于绘制 文本。
ClearType ClearType antialising将用于绘制文字。
由于Auto
是默认值,因此通常会进行ClearType
渲染。
现在,因为这些是附加属性,并且继承,您只需在根Window
设置它们即可。无需创建一堆Style
s。
答案 1 :(得分:0)
当ClearType打开时,我注意到在处理大量数据(超过10,000个项目)时出现了小的性能问题。将TextFormattingMode更改为Display不会对性能产生明显影响。
这就是说,在我的所有WPF应用程序中,我使用全局样式来改进文本呈现,除非性能影响大到足以使UI感觉粘滞。