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

Gra*_*ush 4 wpf xaml c#-4.0

我有一个问题,使一些文字Bold的字体重量使其小于普通字体加权文本.我已经知道这是因为我将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"/>
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

运行时XAML的结果

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

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

Han*_*ant 9

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

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

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

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

来自WPF团队的博客文章详细介绍了该文章.

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