有人可以解释为什么WPF中的所有内容都模糊了吗?这是可以修复的吗?
答案 0 :(得分:18)
这样做的原因是抗锯齿系统,如果它不与物理设备像素对齐,则会将线扩展到多个像素上。
WPF独立于resoultion。这意味着您以英寸为单位指定用户界面元素的大小,而不是以像素为单位。 WPF中的逻辑单位是1/96英寸。选择此比例,因为大多数屏幕的分辨率为96dpi。因此在大多数情况下,1个逻辑单元匹配1个物理像素。但是,如果屏幕分辨率发生变化,则此规则不再有效。
所有WPF控件都提供属性SnapsToDevicePixels
。如果设置为true,则控件确保在物理设备像素上精确绘制所有边。但不幸的是,此功能仅在控制级别上可用。
答案 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回答。尽管我不需要他的答案中的其他代码行,但无论如何我还是添加了它们。