(1 月 18 日编辑补充说,这不仅仅是字体渲染模式,还有字体本身。)
这里有两个相关因素:字体和字体格式模式。
您的 Windows 窗体主机应用程序正在强制使用默认字体系列“Microsoft Sans Serif”,字体大小为 8.25pt,在 WPF 的测量单位中是FontSize
11。但 WPF 通常会使用不同的字体 - 我运行的是带有默认 Aero 主题的 Windows 7,而 WPF 默认为 Segoe UI,带有FontSize
of 12.
因此,您在这里看到不同结果的最大原因是它们是两种不同的字体。添加FontFamily="Segoe UI" FontSize="12"
to the UserControl
root 元素使这两个 WPF 示例在我看来更加一致。 (但这当然会使您的 WPF 文本看起来与包含的 Windows 窗体应用程序中的文本不太一致。这就是ElementHost
将 Windows 窗体字体选择传播到 WPF 内容中。)
在编辑此内容之前,我曾想过这可能是由于Ideal
and Display
WPF 文本呈现模式。意识到这主要与字体有关后,我不再认为情况是这样,但我将在这里保留对其他问题的讨论,因为它对于任何试图使其 WPF 文本看起来与 Windows 一致的人仍然有用表格文本。 WPF 的默认值是Ideal
,但是如果您在 Windows 窗体应用程序中运行,可以说Display
更好,因为这会使其看起来与 Windows 窗体通常呈现事物的方式一致。
您可以通过添加以下内容在 WPF 中针对每个元素进行控制:
TextOptions.TextFormattingMode="Display"
(or "Display"
取决于您想要哪种模式)。此可附加属性是在 WPF v4 中添加的,让您可以在 WPF 自首次发布以来所具有的可缩放但稍微模糊的文本渲染和 Win32 和 GDI+(因此 Windows表格)使用。这将影响您应用它的元素以及任何后代。 (例如,如果您将其设置为StackPanel
它应该适用于该面板中的所有元素,除非您还在子项上本地将其设置为不同的值。)
默认情况下,WPF 尝试比 Win32 或 GDI+ 保持对原始字体设计更好的保真度。它还以一种一致缩放的方式呈现文本 - 增加字体大小,例如 12% 将使屏幕上文本的宽度增大 12%。在 Win32 或 GDI+ 中情况并非如此,您会得到相当复杂的非线性变化。
但许多人抱怨说,为了换取更好的保真度,却得到了模糊度的增加。这就是 WPF 4 引入该新属性的原因。将其设置为Display
以获得保真度较低但更清晰的旧式渲染。
由于您可以在每个元素的基础上选择它,因此您可以为粗体和普通文本独立选择您喜欢的外观。