为什么WPF中的所有内容都模糊不清?
为什么WPF中的所有内容都模糊?
我花了几个小时来弄清楚自定义面板上模糊的原因。在这些自定义面板上,我们使用了一个投影边框效果。这个投影边框是罪魁祸首。如果将面板并排放置,它实际上会导致文本模糊。由于我没有足够的声望来发表评论,所以我回答了这个问题。
UseLayoutRounding="True"
是解决我的问题的方法,正如ecreif所回答的那样。尽管我不需要他答案中的其他代码行,但我还是添加了它们。
解决方法:在WPF中,如果在自定义面板上使用了投影边框效果,并且这些面板并排放置时导致文本模糊,可以通过设置UseLayoutRounding="True"
来解决这个问题。这个属性将启用布局舍入,从而使文本显示更清晰。
为什么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像素的线条可能变得看不见。您需要使用其他技术来解决这些问题。
另外,为具有`
参考链接:[stackoverflow.com/a/1631635/1951524](https://stackoverflow.com/a/1631635/1951524)
为什么WPF中的所有内容都模糊?
WPF中的内容模糊的原因是反锯齿系统,如果线条与物理设备像素不对齐,它会将线条分散到多个像素上。
WPF是分辨率独立的。这意味着您在WPF中指定用户界面元素的大小是以英寸为单位,而不是像素。在WPF中,一个逻辑单位是1/96英寸。选择这个比例是因为大多数屏幕的分辨率是96dpi。因此,在大多数情况下,1个逻辑单位对应1个物理像素。但是,如果屏幕分辨率发生变化,这个规则就不再有效。
所有WPF控件都提供了一个属性SnapsToDevicePixels。如果设置为true,控件会确保所有边缘都精确地绘制在物理设备像素上。但不幸的是,这个功能只在控件级别上可用。
请注意,SnapToDevicePixels属性对文本字形没有影响。尝试在TextBlock上使用它,您会明白我在说什么。不幸的是,目前我们无法解决模糊文本问题。
有关模糊字体的更多信息,请参阅此处:stackoverflow.com/questions/190344