我在
WPF / XAML中有一个带有此模板和样式的网格:
<Setter Property="TextOptions.TextFormattingMode" Value="Display" /> <Setter Property="RenderOptions.ClearTypeHint" Value="Enabled" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridCell}"> <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> <ContentPresenter x:Name="CellContent" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RenderOptions.ClearTypeHint="Enabled" /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="CellContent" Property="TextOptions.TextFormattingMode" Value="Display" /> <Setter TargetName="CellContent" Property="RenderOptions.ClearTypeHint" Value="Enabled" /> <Setter TargetName="CellContent" Property="Effect"> <Setter.Value> <DropShadowEffect ShadowDepth="2" BlurRadius="2" Color="Black" RenderingBias="Quality" /> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter>
我选择网格行时的DropShadowEffect似乎使文本渲染模糊(灰色抗锯齿):
当我删除阴影效果时,它看起来很清晰,因为它现在使用ClearType而不是灰色子像素消除锯齿:
我已经尝试将RenderOptions.ClearTypeHint =“Enabled”应用于ContentPresenter,如上所示,但它没有帮助.
如何强制WPF渲染使用投影效果显示的文本以保留Cleartype抗锯齿,而不是那种丑陋模糊的灰色子像素抗锯齿?
有些人认为它因为投影而变得模糊 – 这不是真的.它只是模糊,因为没有使用ClearType.这是它在Firefox中的阴影和ClearType时的样子:
启用ClearType的文本很丰富 – 但模糊文本不是,因为它不使用ClearType – 它使用灰色子像素消除锯齿,而不是ClearType的工作方式:http://en.wikipedia.org/wiki/ClearType
问题是:如何为此文本启用ClearType?
解决方法
DropShadowEffect对象不能与ClearType一起使用.这在MSDN第
How to: Create Text with a Shadow页上说明:
These shadow effects do not go through the Windows Presentation
Foundation (WPF) text rendering pipeline. As a result,ClearType is
disabled when using these effects.