WPF: почему текст и элементы размываются, если я использую эффект тени для родительского элемента

Если я добавлю 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 ответов


причина, по которой текст размыт, заключается в том, что эффекты заставляют элементы и все подэлементы сначала отображаться в растровое изображение. Это означает, что субпиксельная рендеринг (ClearType) не может иметь место и поэтому текст выглядит более низкого качества.

вы можете обойти это, применив эффект только к частям визуального дерева. Части, которые не содержат текста.

в вашем случае вы, вероятно, хотите что-то вроде этого:

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

Это может быть проблема с субпикселями.

попробуйте добавить UseLayoutRounding = "True" в сетку.


попробуйте добавить TextOptions.TextFormattingMode="Display" к TextBlock как показано в WPF размытые шрифты проблема-решения.
Эффект может каким-то образом увеличить "размытость", например, перемещая сетку на некоторые доли пикселя или около того.