У меня есть DataGrid
, связанный с CollectionViewSource
, заполняемым из базы данных. Некоторые из этих элементов являются «активными», тогда как другие «неактивны». Я хотел бы, чтобы неактивные строки имели другой цвет переднего плана, который мне удалось сделать, но цвет не применяет выбранные строки. Кажется, что System.HighlightTextBrushKey
переопределяет любые попытки изменения выделенного цвета. Вот код, который работает для не выбранных ячеек.Условный цвет переднего плана в выбранной строке DataGrid
<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
по умолчанию).
Я попытался использовать 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>
Я не могу найти решение этого никуда. Есть ли способ сделать цвет переднего плана в выбранной строке условным для некоторого значения границы?
Вы пытались настроить HighlightTextBrushKey на DarkOrchid в DataGrid.Resources? например: ' ' –
sthotakura
@sthotakura yes, но это изменяет все выбранные строки на Dark Orchid. Мне нужны только те строки, которые неактивны и выбраны. –
Ах да, вы правы. – sthotakura