文本选项中的文本格式模式如何影响加粗字体重量的文本。

4

我遇到了一个问题,即将某些文本的字体加粗会使其比普通字体更小。我已经发现这是因为我将TextFormattingMode设置为“显示”;如果将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号,那么粗体文本就会比普通文本更大。我的问题是:是否有一种设置可以使用,使得TextFormattingMode设置为“显示”的12点粗体文字与普通字体相同大小/稍微大一些?

最后一段,我想知道是否有一种设置可以使粗体文本与普通加粗文本的大小相同或更大,同时保持显示文本格式模式和相同的字体大小。 - GrandMasterFlush
1
为什么“理想”设置不满足您的要求?它似乎提供了您正在寻找的功能... - Joe
@Joe - 我觉得当我在Windows上查看时,“显示”模式会给出更好的结果。 - GrandMasterFlush
2个回答

9
问题不在于粗体文本太短,而是普通文本太长。
这背后有历史,WPF最初在.NET 3.0中发布,仅支持文本缩放的"Ideal"模式。这种模式支持真正的分辨率独立文本缩放,在具有不同每英寸点数分辨率的显示设备上,一行文本将具有可预测的英寸长度。然而,这引起了WPF程序员的抱怨,他们不喜欢这种产生模糊文本的方式。这在您的屏幕截图中可以看到。请注意,在"Ideal"模式下,粗体字母m的左侧垂直线过于粗壮,但在"Display"模式下则没有。
在.NET 4.0中,WPF团队支持了一种名为"Display"的新文本呈现方式。它以GDI的方式呈现文本,应用字体提示规则来调整字母形状,使其与监视器的像素网格更好地重合。这往往会拉伸字母,特别是当它们的垂直线只有一个像素时。由于这一点,文本非常易读,但真正的分辨率独立呈现被丢失。
Winforms也经历了类似的演变,从Graphics.DrawString()到TextRenderer.DrawText()。
这篇来自WPF团队的博客文章详细介绍了相关内容。
因此,你的问题的答案是不可以。

感谢您抽出时间查看,汉斯。我已经阅读了您提到的有关显示模式实现的一些内容,并认为这可能与此有关,但不知道具体情况。如果我没记错的话,“理想”模式会随着显示器的不断改进而适用于所有人,对吗? - GrandMasterFlush
1
是的,当每个人都拥有“视网膜”显示器时,这将成为古老的糟糕记忆。这需要一些努力,它们已经停留在96 dpi上已经25年了,许多程序处理得不好。 - Hans Passant

1

很遗憾,您已经回答了自己的问题。答案是否定的。我不确定为什么会出现这种情况。我查看了它并在SNOOP中拉了一下,确实是渲染得更小。

似乎所有字体设置在10.5和12.4之间都有这个问题。字体8、9或10、10.4和12.5、13、14没有。

听起来是联系微软的时候了。提交一个错误报告。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接