WPF WindowsFormsHost创建模糊文本
我在WPF窗口上的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
WindowsFormsHost
内托管一个winformsDataGridView
。功能很好,但网格单元中的文本看起来有点模糊。通常,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被禁用。很高兴知道发生了什么至少。。。有办法把它关掉吗?还是让它变得更好?