WPF WindowsFormsHost创建模糊文本

WPF WindowsFormsHost创建模糊文本,wpf,visual-studio-2010,text-rendering,windowsformshost,Wpf,Visual Studio 2010,Text Rendering,Windowsformshost,我在WPF窗口上的WindowsFormsHost内托管一个winformsDataGridView。功能很好,但网格单元中的文本看起来有点模糊。通常,WinForms文本具有很少的抗锯齿功能 如何使DataGridView文本与Windows窗体上的文本一样,或者至少更清晰?我尝试过使用WindowsFormsHost的TextOptions.textformatingmode和SnapsToDevicePixels设置,但没有发现任何区别 下面是两个屏幕截图,以说明我的意思: Datagri

我在WPF窗口上的
WindowsFormsHost
内托管一个winforms
DataGridView
。功能很好,但网格单元中的文本看起来有点模糊。通常,WinForms文本具有很少的抗锯齿功能

如何使
DataGridView
文本与Windows
窗体上的文本一样,或者至少更清晰?我尝试过使用
WindowsFormsHost
TextOptions.textformatingmode
SnapsToDevicePixels
设置,但没有发现任何区别

下面是两个屏幕截图,以说明我的意思:

Datagridview
在WPF中
WindowsFormsHost

DataGridView
在Windows窗体中:


承载的WinForms/Win32内容的外观不应受到WPF的影响。“空域”限制规定单个窗口像素只能由单个图形API拥有,并且只能由该API绘制。因此,WinForms内容由WinForms/GDI+绘制,即使由WPF托管。这解释了为什么托管内容将绘制在同一窗口中任何WPF内容的顶部,即使WPF内容位于其前面

更改WPF呈现属性(如
textformatingmode
)不会影响互操作内容的外观。您应该查看托管WinForms内容的布局/呈现属性

更新

大概模糊效应是对
DataGridView
的WPF默认为灰度AA所造成的。在
DataGridView
Paint
和/或
CellPaint
事件中,将图形文本提示设置为cleartype:

 e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit

消除了大部分模糊性。

这是有道理的,但当我在Windows窗体上放置一个
DataGridView
时,然后将相同的
DataGridView
放在WPF窗口的
WindowsFormHost
中,文本呈现的差异非常明显。奇怪
WindowsFormsHost
设置一些WPF和WinForms属性之间的转换,如
前台
后台
FontFamily
等(请参见
WindowsFormsHostPropertyMap
)。但我看不到任何影响抗锯齿的因素。也许有一个进程范围的标志被继承了?是的,代码方面,我只是将网格转储到
WindowsFormsHost
,从上面的屏幕截图来看
fontframy
看起来相同或非常相似。这远远超出了我的能力范围。但是,当查看一个由相当小的文本组成的大网格时,抗锯齿变得有点烦人,至少在我的显示器上是这样。从屏幕截图上看,它似乎在使用灰度抗锯齿(与ClearType相反)。我怀疑这是一个进程范围的标志,因为我似乎记得WPF应用程序会退回到灰度AA,即使系统范围的AA被禁用。很高兴知道发生了什么至少。。。有办法把它关掉吗?还是让它变得更好?