为什么WPF中的所有内容都模糊不清?

13 wpf clarity

有人可以解释为什么WPF中的一切都模糊了吗?这是可以修复的吗?

CSh*_*per 19

其原因是抗锯齿系统,如果它不与物理设备像素对齐,则将线扩展到多个像素上.

WPF独立于resoultion.这意味着您以英寸为单位指定用户界面元素的大小,而不是以像素为单位.WPF中的逻辑单位是1/96英寸.选择此比例,因为大多数屏幕的分辨率为96dpi.因此在大多数情况下,1个逻辑单元匹配1个物理像素.但是,如果屏幕分辨率发生变化,则此规则不再有效.

所有WPF控件都提供属性SnapsToDevicePixels.如果设置为true,则控件确保在物理设备像素上精确绘制所有边.但遗憾的是,此功能仅适用于控制级别.

来源:在物理设备像素上精确绘制线条

  • 这里有更多关于模糊字体的信息:http://stackoverflow.com/questions/190344/wpf-blurry-fonts-problem-solutions (2认同)

ecr*_*eif 6

快速解决:

在从根到模糊控件的每个容器上使用这些选项

        UseLayoutRounding="True"
        RenderOptions.BitmapScalingMode="NearestNeighbor"
        SnapsToDevicePixels="True"
        RenderOptions.ClearTypeHint="Enabled"
Run Code Online (Sandbox Code Playgroud)

解释:

UseLayoutRounding=true修复了子像素布局问题。它们经常发生,因为例如“效果”将控件的大小调整为像素之间的某个值。

RenderOptions.BitmapScalingMode=NearestNeighbor修复了位图的模糊采样。当使用效果或其他技术时,会使用位图。当它们重新应用到容器或控件时,它们可能最终位于像素之间,因此会插入位图的像素。

SnapsToDevicePixels="True"修复在像素之间渲染的垂直和水平多边形、线条和矩形

RenderOptions.ClearTypeHint="Enabled"重新启用文本上的 ClearType。它很容易通过效果或渲染器不知道文本的确切背景而被禁用。

您应该在每个容器上使用它,因为有时,例如通过数据模板,这些选项会再次默认用于子控件。