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

时间:2009-04-30 06:54:45

标签: wpf clarity

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

3 个答案:

答案 0 :(得分:18)

这样做的原因是抗锯齿系统,如果它不与物理设备像素对齐,则会将线扩展到多个像素上。

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

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

来源:Draw lines excactly on physical device pixels

答案 1 :(得分:2)

快速修复:

每个容器从root用户到模糊控件

上使用这些选项
        UseLayoutRounding="True"
        RenderOptions.BitmapScalingMode="NearestNeighbor"
        SnapsToDevicePixels="True"
        RenderOptions.ClearTypeHint="Enabled"

说明:

UseLayoutRounding = true 修复了子像素布局问题。它们经常发生,例如效果将控件调整为像素之间的内容。

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

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

RenderOptions.ClearTypeHint =“已启用”重新启用文本上的cleartype。通过效果或渲染器不知道文本的确切背景时,它很容易被禁用。

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

答案 2 :(得分:0)

我花了几个小时试图找出导致自定义面板模糊的原因。在这些自定义面板上,我们使用阴影边框效果。阴影是元凶。如果将面板并排放置,实际上会导致文本模糊。我的声誉不高,无法发表评论,所以我正在回答这个问题。

UseLayoutRounding="True"

是我的问题的解决方法,由ecreif回答。尽管我不需要他的答案中的其他代码行,但无论如何我还是添加了它们。