c# - 使用文本阴影样式选择 DataGrid 单元格?

标签 c# wpf xaml datagrid

我试图在选择行时向单元格文本添加文本阴影。

更新:

这就是我现在拥有的:

<Style TargetType="{x:Type DataGridCell}">
    <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}"/>
                </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>
</Style>

它仅向文本添加阴影(正是我想要的),并且当选择行时(正是我想要的)。现在唯一的问题是我失去了子像素抗锯齿功能:

enter image description here

所选行是下面带有蓝色背景的行。它现在使用某种灰色抗锯齿,这使它看起来很糟糕。我尝试设置 RenderOptions.ClearTypeHint ,但没有成功。如何启用它,使其看起来像没有选择的行一样清晰?

这是灰色抗锯齿在 100% 尺寸下的外观(模糊):

enter image description here

最佳答案

单元格的背景使您看不到效果。就这样设置背景,但不知道你是否喜欢这样的结果:

<Style TargetType="{x:Type DataGridCell}">
  <Setter Property="Background" Value="Transparent"/>
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Effect">
        <Setter.Value>
          <DropShadowEffect ShadowDepth="2"
                            BlurRadius="2"
                            Color="Black"
                            RenderingBias="Quality"/>
        </Setter.Value>
      </Setter>
    </Trigger>
  </Style.Triggers>
</Style>

编辑

也许这更好,因为它给你更多的控制权:

<Style TargetType="{x:Type DataGridCell}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type DataGridCell}">
        <ContentPresenter x:Name="CellContent"/>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="True">
            <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>
</Style>

关于c# - 使用文本阴影样式选择 DataGrid 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725005/

相关文章:

wpf - 如何设置从 DependencyObject 派生的类型的 DependencyProperty 的默认值

c# - 如何使用 MVVM 自动隐藏 WPF 中的 DataGrid 列?

c# - 如何正确创建带有图像的按钮

c# - 可观察的订阅如何优雅地终止?

c# - 从 python 调用 C# 库

c# - 为什么要使用服务(IServiceProvider)?

c# - 全局更改工具提示 InitialShowDelay 属性

c# - 如何使用 LINQ MVC 基于 AND 条件应用搜索过滤

WPF UI 未在属性更改时更新

c# - 如何获取对 ViewModel 的引用