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