2016-12-28 55 views
1

我正在编写一个快速而脏的WPF应用程序作为完整的WPF新手。我有一个简单的数据网格:突出显示WPF数据网格中的单元格时不显示任何文本

<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,这几乎是相同的教程和堆栈溢出的例子负荷有色:

class ValueColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
     { 
      return Brushes.Beige; 
     } 
     else if (value is string) 
     { 
      string str = ((string)value).Trim(); 
      if (str.Equals(string.Empty)) 
      { 
       return Brushes.Beige; 
      } 
      else if (str.Equals("0")) 
      { 
       return Brushes.LightYellow; 
      } 
     } 

     return System.Windows.DependencyProperty.UnsetValue; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

IValueConverter工作完全像它应该,但它引入了一个奇怪的副作用:选择一行使得其单元格中的所有值都消失。这些值仍然存在,因为更改选择或双击单元格会使它们再次可见(请参阅下面的.gif文件)。

screen capture of problematic behaviour, recorded with GifCam

这显然是不幸的,因为人们通常突出了行,从而具有在其数据仔细看看。

什么是造成这种行为,我该如何解决它?

回答

3

添加资源(SystemColors.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> 
相关问题