WPF 数据网格格式 - 并非所有样式都受到尊重

Posted

技术标签:

【中文标题】WPF 数据网格格式 - 并非所有样式都受到尊重【英文标题】:WPF Data Grid Formatting - Not All Styles Are Honored 【发布时间】:2021-12-07 17:49:34 【问题描述】:

问题

使用的样式:

DataGridRow DataGridCell

我可以使突出显示单元格填充起作用,但不能同时。我尝试了许许多多不同的方法(例如,资源与特定的 DataGrid 样式),但没有任何效果并且允许质疑。

<UserControl.Resources>
    <!-- DataGridRow style -->
    <Style x:Key="MyRowStyle" TargetType="x:Type DataGridRow">
        <Style.Resources>
            <SolidColorBrush 
              x:Key="x:Static SystemColors.HighlightBrushKey" Color="#E5BE47" />
            <SolidColorBrush 
              x:Key="x:Static SystemColors.HighlightTextBrushKey" Color="Blue" />
        </Style.Resources>
    </Style>
    <!-- DataGridCell style -->
    <Style x:Key="MyCellStyle" TargetType="x:Type DataGridCell">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="x:Type DataGridCell">
                    <Border x:Name="border" Padding="15,10,10,15">
                        <ContentPresenter/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>

<Grid>
    <!-- BOTH styles are used, which illustrates the problem: -->
    <DataGrid x:Name="Connections" AutoGenerateColumns="False" 
      RowStyle="StaticResource MyRowStyle" 
      CellStyle="StaticResource MyCellStyle">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Process Id"/>
            <DataGridTextColumn Header="Name"/>
            <DataGridTextColumn Header="Application"/>
            <DataGridTextColumn Header="Directory" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

前景将正确更改为“红色”,但背景仍为白色(而不是 #E5BE47 定义的黄色)。由于某些我不明白的原因,似乎完全忽略了 HighlightBrushKey 何时还使用了 DataGridCell 样式。

这是一个 AND 问题,而不是 OR 问题。如何在 DataGrid 中使用这两种样式?另外,样式有效。 问题是两者的结合......两者都不能一起工作 - 为什么以及如何解决?

左输出,右输出:

如果DataGridCell 样式被删除,则荧光笔的背景颜色可以正常工作...但这不是解决方案,因为它会删除所需的填充。

【问题讨论】:

【参考方案1】:

有效

<Style x:Key="MyRowStyle" TargetType="x:Type DataGridRow">
    <Style.Resources>             
         <SolidColorBrush x:Key="x:Static SystemColors.HighlightTextBrushKey" Color="Blue" />
    </Style.Resources>
    <Style.Triggers>
       <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="#E5BE47 />
       </Trigger>
    </Style.Triggers>
</Style>

【讨论】:

感谢您对此进行调查,但问题仍然存在:它是突出显示和单元格填充的组合。当使用两种样式时(如在我的演示代码中),突出显示将被忽略。但是,如果我删除 CellStyle="StaticResource MyCellStyle" 则可以突出显示,但我没有得到所需的填充。因此,这两种样式(DataGridCell 和 DataGridRow)之间存在一些冲突。 @ChEJunkie 我编辑了我的答案。我添加了触发器,它可以工作。 谢谢@dmitriy!对于遇到此问题的任何人,这似乎是有关解决方案的更多信息的合理资源:tutorialspoint.com/xaml/xaml_triggers.htm

以上是关于WPF 数据网格格式 - 并非所有样式都受到尊重的主要内容,如果未能解决你的问题,请参考以下文章

WPF 数据网格样式

WPF Grid - 如何为一列应用样式?

如何使用样式/模板格式化 wpf 中的小数位数?

样式化 wpf 数据网格

WPF中的网格样式没有模板属性?

WPF 数据网格。无法突出显示自定义样式的单元格