【发布时间】:2012-04-27 00:28:48
【问题描述】:
我在 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 才模糊。这是阴影和 ClearType 在 Firefox 中的样子:
启用 ClearType 的文本是彩色的 - 但模糊文本不是,因为它不使用 ClearType - 它使用灰色亚像素抗锯齿,这不是 ClearType 的工作原理:http://en.wikipedia.org/wiki/ClearType
问题是:如何为这个文本启用 ClearType?
【问题讨论】:
-
在我看来,它看起来很模糊是因为阴影效果,而不是因为抗锯齿样式。
-
@CodyGray 对不起,你错了。 :) 很模糊,因为没有使用 ClearType。
-
嗯...你能告诉我我的回答有什么问题吗?
-
Pedantry:我想指出,文本阴影渲染只是标准的抗锯齿,就像在 Mac 和 Linux 操作系统上使用的那样。它没有任何“亚像素”。 ClearType 的特别之处(如此丰富多彩)在于它使用亚像素渲染。
标签: c# .net wpf xaml cleartype