wpf - TextOptions.TextFormattingMode 影响具有粗体字重的文本

标签 wpf xaml c#-4.0

I've had a problem使某些文本的字体粗体粗体使其小于普通字体加权文本。我发现这是因为我将 TextFormattingMode 设置为“Display”;如果 TextFormattingMode 设置为“理想”,则不会出现此问题。

例如,下面的代码:

 <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 设置为“显示”,它的大小与正常加权文本相同/略大?

最佳答案

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

这背后有历史,WPF 最初在 .NET 3.0 中发布,仅支持缩放文本的“理想”模式。此模式支持真正分辨率无关的文本缩放,在具有不同每英寸点数分辨率的各种显示设备上,一行文本将具有可预测的长度(以英寸为单位)。这没有得到很好的接受,它引起了 WPF 程序员的大量提示,他们不喜欢这样产生的模糊文本。这在您的屏幕截图中可见。请注意粗体字母 m 的左词干在理想模式下太胖,但在显示模式下却不是。

在 .NET 4.0 中,WPF 团队支持一种新的文本呈现方式,称为“显示”。它以 GDI 的方式呈现文本,应用字体提示规则来调整字母形状,使其与显示器的像素网格更好地重合。这往往会拉伸(stretch)字母,尤其是当它们的词干只有一个像素时。点大小越小,这种情况就越明显。文本因此具有很高的可读性,但会丢失真正的分辨率无关渲染。

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

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

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

关于wpf - TextOptions.TextFormattingMode 影响具有粗体字重的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13140431/

相关文章:

c# - WPF 中的可拖动控件?

c# - wpf 窗口刷新首先起作用,然后停止

wpf - WPF 中 ListBoxItem 上的虚线边框

c# - 带有自定义轴标签的 xaml c# 图表

c# - 在哪里可以找到列表中可单击项目使用的 Windows Phone 按钮样式?

.net - 我自己的托管类型作为 C++/CLI 类库中的 arg : CS0570: is not supported by the language

c#-4.0 - Google Bigquery 中的季度、周日期函数

java - 有没有办法使用多次尝试和一次捕获?

wpf - Silverlight TreeView 。无法绑定(bind) "IsExpanded"属性

c# - CefSharp - 无法启用 webgl