为什么带有阴影的文本元素在执行应用程序时显得模糊

时间:2014-07-08 13:18:42

标签: c# wpf user-interface

我在VS2013中使用WPF技术编写了一个应用程序。

当我运行程序时,阴影文本的文本质量低于我在Visual Studio中使用设计模式看到的文本质量。

以下是图片中发生的事情:

enter image description here

当发生这种情况时,界面中的用户很难阅读较小的波斯文或英文字符(7,8,9 px文本大小)。

为什么在调试模式下这似乎更好,并且如何在最终应用程序中获得相同的质量?

1 个答案:

答案 0 :(得分:1)

由于WPF在格式化文本时使用的文本指标,因此会出现渲染模糊。

TextOptions.TextFormattingMode是您的解决方案,这将指示TextFormatter布置文本时要使用的字体指标。

所以在文本元素上设置此附加属性以启用相同的

例如

<TextBlock Text="Test" TextOptions.TextFormattingMode="Display" />

通过将值设置为Display,您将收到使用最佳GDI兼容字体指标呈现的字体,且模糊程度最小

除了上述之外,您还可以使用会影响非文本元素呈现的RenderOptions.EdgeMode

RenderOptions.BitmapScalingMode也可以帮助您在缩放等时防止模糊。

例如

<Grid RenderOptions.EdgeMode="Aliased" RenderOptions.BitmapScalingMode="NearestNeighbor">
    <Border BorderBrush="Black" BorderThickness="1">
        <TextBlock Text="Test" TextOptions.TextFormattingMode="Display"/>
    </Border>
</Grid>

结合上述内容,您可以确保最清晰的UI渲染

你似乎也在使用投影,所以可能在投影中包含RenderingBias="Quality"以提高阴影质量

    <TextBlock Text="Test" TextOptions.TextFormattingMode="Display">
        <TextBlock.Effect>
            <DropShadowEffect RenderingBias="Quality"/>
        </TextBlock.Effect>
    </TextBlock>

更多信息

TextOptions.TextFormattingMode

RenderOptions.EdgeMode

RenderOptions.BitmapScalingMode