C# 在WPF datagrid中高亮显示单元格时,没有可见的文本
作为一名WPF新手,我正在编写一个快速而肮脏的WPF应用程序。我有一个简单的数据网格:C# 在WPF datagrid中高亮显示单元格时,没有可见的文本,c#,wpf,datagrid,wpfdatagrid,C#,Wpf,Datagrid,Wpfdatagrid,作为一名WPF新手,我正在编写一个快速而肮脏的WPF应用程序。我有一个简单的数据网格: <DataGrid ItemsSource="{Binding Path=BetterFoods}" Grid.Row="1" Grid.Column="0" AutoGenerateColumns="True" Loaded="DataGrid_Loaded"> <DataGrid.Resources> <local:ValueColorConverte
<DataGrid ItemsSource="{Binding Path=BetterFoods}" Grid.Row="1" Grid.Column="0" AutoGenerateColumns="True" Loaded="DataGrid_Loaded">
<DataGrid.Resources>
<local:ValueColorConverter x:Key="colorconverter"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF0033"/>
</DataGrid.Resources>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource colorconverter}}"/>
</Style>
</DataGrid.CellStyle>
</DataGrid>
IValueConverter
的工作原理与它应该的一样,但它引入了一个奇怪的副作用:选择一行会使其单元格中的所有值消失。这些值仍然存在,因为更改选择或双击单元格会使它们再次可见(请参见下面的.gif)
这显然是不幸的,因为人们通常会突出显示一行,以便更仔细地查看其数据
导致此行为的原因是什么?如何修复它?添加一个资源(SystemColor.HighlightTextBrushKey),将文本笔刷更改为较暗的颜色,以便您可以实际看到文本:
<DataGrid ItemsSource="{Binding Path=BetterFoods}" Grid.Row="1" Grid.Column="0" AutoGenerateColumns="True">
<DataGrid.Resources>
<local:ValueColorConverter x:Key="colorconverter"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF0033"/>
<!-- ADDED: -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
</DataGrid.Resources>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource colorconverter}}"/>
</Style>
</DataGrid.CellStyle>
</DataGrid>
<DataGrid ItemsSource="{Binding Path=BetterFoods}" Grid.Row="1" Grid.Column="0" AutoGenerateColumns="True">
<DataGrid.Resources>
<local:ValueColorConverter x:Key="colorconverter"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF0033"/>
<!-- ADDED: -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
</DataGrid.Resources>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource colorconverter}}"/>
</Style>
</DataGrid.CellStyle>
</DataGrid>