我有DataGrid
绑定到从数据库填充的CollectionViewSource
。其中一些项目是活跃的"而其他人则不活跃。"我希望非活动行具有不同的前景色,我已设法做到这一点,但颜色不适用于所选行。似乎System.HighlightTextBrushKey
会覆盖更改突出显示颜色的任何尝试。以下是适用于非选定单元格的代码。
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{StaticResource ThemeHighlightColor}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{StaticResource ThemeHighlightColor}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=active}" Value="False">
<Setter Property="Foreground" Value="DarkOrchid"/>
<Setter Property="FontWeight" Value="DemiBold"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=active}" Value="True">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontWeight" Value="Normal"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
在上述情况下,&#34;无效&#34;行将采用DemiBold字体,即使已选中,但只有未选择的行采用DarkOrchid颜色。相反,他们使用黑色的SystemColors.HighlightTextBrushKey
颜色(即使我没有明确说明这一点,这些选定的行使用白色的默认SystemColors.HighlightTextBrushKey
颜色。)
我尝试使用MultiTrigger
代替上述DataTriggers
,但我遇到了完全相同的问题(字体为粗体,但仍为黑色)。这是MultiTrigger
:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=active}" Value="False"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Foreground" Value="DarkOrchid"/>
<Setter Property="FontWeight" Value="DemiBold"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
我无法在任何地方找到解决方案。有没有办法让某个选定行的前景色以某个绑定值为条件?
答案 0 :(得分:0)
当我遇到这个问题时,我为单元格内容创建了一个样式(在我的情况下为TextBlock
)。我将样式放在DataGrid.Resources
中。在你的情况下,它看起来像:
<Datagrid.Resouces>
<Style TargetType="{x:Type TextBlock}" x:Key="Text">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=active}" Value="False">
<Setter Property="Foreground" Value="DarkOrchid"/>
<Setter Property="FontWeight" Value="DemiBold"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=active}" Value="True">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontWeight" Value="Normal"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Datagrid.Resouces>
从那里你可以在每个细胞中使用它。这看起来像是:
<DataGridTextColumn Header="Name" Binding="{Binding FirstName}"
ElementStyle="{StaticResource Text}" />
为每个列添加样式会有点痛苦,但这会优先于System.HighlightTextBrushKey
的{{1}}。
顺便说一下,通过这种方式为每个DataGrid
设置风格将保留包括所选条件和鼠标悬停在内的所有条件的前景色。如果您需要针对这些条件使用不同的前景色,则需要将它们添加到TextBlock
集合中。