WPF:如果我对父项使用drophadow效果,为什么文本和元素会模糊

时间:2011-06-22 07:38:35

标签: wpf xaml blur dropshadow

如果我向父元素添加DropShadowEffect,则子元素的文本会模糊。为什么呢?

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

更新

带阴影

enter image description here

没有阴影

enter image description here

3 个答案:

答案 0 :(得分:42)

文本模糊的原因是因为效果会导致元素和所有子元素首先渲染到位图中。这意味着无法进行子像素渲染(ClearType),因此文本显示质量较低。

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

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

<Grid>
    <Border>
        <Border.Effect>
            <DropShadowEffect />
        </Border.Effect>
    </Border>
    <TextBlock Background="White">Test</TextBlock>
</Grid>

答案 1 :(得分:21)

子像素可能存在问题。

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

答案 2 :(得分:3)

尝试将TextOptions.TextFormattingMode="Display"添加到TextBlock,如WPF Blurry fonts problem - Solutions所示 该效果可能以某种方式增加“模糊”,例如将网格移动一些像素左右的部分。