WPF: почему текст и элементы размываются, если я использую эффект drophadow на родительском элементе - PullRequest
21 голосов
/ 22 июня 2011

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

43 голосов
/ 04 августа 2011

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

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

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

<Grid>
    <Border>
        <Border.Effect>
            <DropShadowEffect />
        </Border.Effect>
    </Border>
    <TextBlock Background="White">Test</TextBlock>
</Grid>
21 голосов
/ 20 февраля 2013

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

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

3 голосов
/ 22 июня 2011

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

...