J'ai un DataGrid
lié à un CollectionViewSource
qui est rempli à partir d'une base de données. Certains de ces éléments sont "actifs" tandis que d'autres sont "inactifs". Je voudrais que les lignes inactives aient une couleur de premier plan différente, ce que j'ai réussi à faire, mais la couleur n'applique pas les lignes sélectionnées. Il semble que le System.HighlightTextBrushKey
annule toute tentative de modification de la couleur en surbrillance. Voici le code qui fonctionne pour les cellules non sélectionnées.Couleur de premier plan conditionnelle sur la ligne DataGrid sélectionnée
<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>
Dans le cas ci-dessus, les lignes « inactifs » prendront la police DemiBold, même si elle est sélectionnée, mais seulement des lignes non sélectionnées prendre la couleur DarkOrchid. Au lieu de cela, ils utilisent la couleur SystemColors.HighlightTextBrushKey
de noir (même si je ne le dis pas explicitement, ces lignes sélectionnées utilisent la couleur SystemColors.HighlightTextBrushKey
par défaut).
J'ai essayé d'utiliser un MultiTrigger
au lieu du DataTriggers
ci-dessus mais j'ai exactement le même problème (la police est en gras, mais reste noire). Voici le 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>
Je ne peux pas trouver une solution à ce partout. Est-il possible de rendre la couleur de premier plan sur une ligne sélectionnée conditionnelle à une valeur liée?
Avez-vous essayé de définir HighlightTextBrushKey à DarkOrchid dans DataGrid.Resources? comme ceci: ' ' –
sthotakura
@sthotakura oui, mais cela change toutes les lignes sélectionnées à Dark Orchid. Je ne veux que les lignes inactives ET sélectionnées. –
Ah oui, vous avez raison. – sthotakura