【发布时间】:2016-12-24 12:26:25
【问题描述】:
我有一个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>
在上述情况下,“非活动”行将采用 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>
我在任何地方都找不到解决方案。有什么方法可以使选定行的前景色以某个绑定值为条件?
【问题讨论】:
-
您是否尝试在 DataGrid.Resources 中将 HighlightTextBrushKey 设置为 DarkOrchid?像这样:
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="DarkOrchid"/> -
@sthotakura 是的,但这会将所有选定的行更改为 Dark Orchid。我只想要处于非活动状态并被选中的行。
-
啊,是的,你是对的。
标签: c# wpf datagrid selected foreground