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 数据网格格式 - 并非所有样式都受到尊重的主要内容,如果未能解决你的问题,请参考以下文章