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

23 浏览
0 Comments

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

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

0
0 Comments

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

我花了几个小时来弄清楚自定义面板上模糊的原因。在这些自定义面板上,我们使用了一个投影边框效果。这个投影边框是罪魁祸首。如果将面板并排放置,它实际上会导致文本模糊。由于我没有足够的声望来发表评论,所以我回答了这个问题。

UseLayoutRounding="True"是解决我的问题的方法,正如ecreif所回答的那样。尽管我不需要他答案中的其他代码行,但我还是添加了它们。

解决方法:在WPF中,如果在自定义面板上使用了投影边框效果,并且这些面板并排放置时导致文本模糊,可以通过设置UseLayoutRounding="True"来解决这个问题。这个属性将启用布局舍入,从而使文本显示更清晰。

0
0 Comments

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

问题的原因是WPF中的一些默认设置会导致内容模糊。例如,子像素布局问题、位图采样问题、垂直和水平多边形、线条和矩形渲染在像素之间、文本清晰度问题等。

为了解决这个问题,我们可以在从根容器到模糊的控件的每个容器上使用以下选项:

UseLayoutRounding="True"
RenderOptions.BitmapScalingMode="NearestNeighbor"
SnapsToDevicePixels="True"
RenderOptions.ClearTypeHint="Enabled"

其中,`UseLayoutRounding=true`可以修复子像素布局问题,它通常发生在例如效果调整控件大小时,导致控件的大小介于像素之间。

`RenderOptions.BitmapScalingMode=NearestNeighbor`可以修复位图的模糊采样问题。当应用效果或其他技术时,位图会被使用。当它们被重新应用到容器或控件时,可能会落在像素之间,从而导致位图的像素被插值。

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

`RenderOptions.ClearTypeHint="Enabled"`可以重新启用文本的ClearType功能。它很容易被效果或者渲染器对文本的背景不确定而禁用。

由于有时候,例如通过数据模板,这些选项会对子控件重新默认设置,所以您应该在每个容器上使用它们。

此外,您可能会在4K屏幕或其他情况下遇到视觉问题。例如,文本可能在中间出现撕裂或者有些像素完全丢失,甚至整个1像素的线条可能变得看不见。您需要使用其他技术来解决这些问题。

另外,为具有``定义的Grid设置`UseLayoutRounding=true`就足以修复其所有子元素和自身的模糊问题。另一种解决方法是不在具有效果的元素中放置子元素,而是使它们成为兄弟元素。

参考链接:[stackoverflow.com/a/1631635/1951524](https://stackoverflow.com/a/1631635/1951524)

0
0 Comments

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

WPF中的内容模糊的原因是反锯齿系统,如果线条与物理设备像素不对齐,它会将线条分散到多个像素上。

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

所有WPF控件都提供了一个属性SnapsToDevicePixels。如果设置为true,控件会确保所有边缘都精确地绘制在物理设备像素上。但不幸的是,这个功能只在控件级别上可用。

请注意,SnapToDevicePixels属性对文本字形没有影响。尝试在TextBlock上使用它,您会明白我在说什么。不幸的是,目前我们无法解决模糊文本问题。

有关模糊字体的更多信息,请参阅此处:stackoverflow.com/questions/190344

0