TextOptions.TextFormattingMode影响带粗体字体重的文本

时间:2012-10-30 13:48:50

标签: wpf xaml c#-4.0

I've had a problem在哪里制作某些文字粗体的字体粗细使其小于普通字体加权文字。我已经知道这是因为我将TextFormattingMode设置为“Display”;如果TextFormattingMode设置为“Ideal”,则不会出现此问题。

例如,以下代码:

 <Label FontFamily="Calibri" FontSize="12" FontWeight="Bold" Content="This is some test text" TextOptions.TextFormattingMode="Ideal"/>
 <Label FontFamily="Calibri" FontSize="12" Content="This is some test text" TextOptions.TextFormattingMode="Ideal"/>
 <Label></Label>
 <Label FontFamily="Calibri" FontSize="12" FontWeight="Bold" Content="This is some test text" TextOptions.TextFormattingMode="Display"/>
 <Label FontFamily="Calibri" FontSize="12" Content="This is some test text" TextOptions.TextFormattingMode="Display"/>

产生以下内容:

Results of XAML when running

如果我将最后两个标签的字体大小增加到大约14,则粗体文本会比正常加权文本大。

我的问题是:是否有一个设置我可以使用12点粗体文本,TextFormattingMode设置为“显示”,其大小相同/略大于正常加权文本?

2 个答案:

答案 0 :(得分:9)

问题不在于粗体文本太短,而是普通文本太长了。

这背后有历史,WPF最初是在.NET 3.0上发布的,只支持缩放文本的“理想”模式。此模式支持真正的分辨率独立文本缩放,一行文本在各种显示设备上具有可预测的英寸长度,具有不同的每英寸点数分辨率。这并没有很好地收到,它引起了WPF程序员的大量抱怨,他们不喜欢这样产生的模糊文本。这在您的屏幕截图中可见。请注意粗体字母m的左主干在理想模式下是如何太胖但在显示模式下不是。

在.NET 4.0中,WPF团队支持一种新的呈现文本方式,称为“显示”。它以GDI的方式呈现文本,应用字体提示规则来调整字母形状,使其与显示器的像素网格更好地重合。这往往会拉伸字母,特别是当它们的茎只有一个像素时。点大小越小,变得越明显。由于它,文本具有高可读性,但真正的分辨率独立渲染会丢失。

Winforms也经历了类似的演变,从Graphics.DrawString()到TextRenderer.DrawText()。

来自WPF团队的blog post有详细信息。

因此,您的问题的答案是否定的。

答案 1 :(得分:1)

很遗憾,您已经回答了您的问题。答案是不。我不确定为什么会这样。我看着它并在SNOOP中把它拉起来,果然它变小了。

似乎10.5和12.4之间的所有字体设置都有此问题。字体8,9或10,10.4和12.5,13,​​14不会。

听起来像是时候联系微软了。提交错误。

此外,这与您的Windows显示设置有关。当我将显示设置从100%切换到125%时,问题发生了变化。它们现在看起来大小相同,而不是更小。