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]()
Ответы
Ответ 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 - Решения.
Эффект может каким-то образом увеличить "размытость", например, перемещая сетку с некоторыми долями пикселя или около того.