我在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?

最佳答案

DropShadowEffect对象不能与ClearType一起使用。这在MSDN页面How to: Create Text with a Shadow上说明:



毕竟,DropShadowEffect是位图效果,而不是文本效果。

08-05 12:39