25

如果我将 a 添加DropShadowEffect到父元素,则子元素的文本会变得模糊。为什么?

<Grid>
    <Grid.Effect>
        <DropShadowEffect />
    </Grid.Effect>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
    </Grid.RowDefinitions>
    <TextBlock Background="White">Test</TextBlock>
</Grid>

更新:

有阴影

在此处输入图像描述

没有影子

在此处输入图像描述

4

3 回答 3

49

文字之所以模糊,是因为Effects导致元素和所有子元素先渲染成Bitmap。这意味着无法进行子像素渲染 (ClearType),因此文本质量会降低。

您可以通过仅将效果应用于视觉树的部分来解决此问题。不包含文本的部分。

在你的情况下,你可能想要这样的东西:

<Grid>
    <Border>
        <Border.Effect>
            <DropShadowEffect />
        </Border.Effect>
    </Border>
    <TextBlock Background="White">Test</TextBlock>
</Grid>
于 2011-08-04T06:38:45.453 回答
24

这可能是子像素的问题。

尝试添加UseLayoutRounding = "True"到网格中。

于 2013-02-20T01:21:21.083 回答
3

尝试添加TextOptions.TextFormattingMode="Display"到 TextBlock,如WPF 模糊字体问题 - 解决方案中所示。
该效果可能会以某种方式增加“模糊度”,例如将网格移动几分之一像素左右。

于 2011-06-22T08:02:02.880 回答