Подтвердить что ты не робот

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

Если я добавлю DropShadowEffect в родительский элемент, текст дочерних элементов будет размытым. Почему?

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

Update:

с тенью

enter image description here

без тени

enter image description here

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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