2016-12-28 23 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

これは、1つは通常、そのデータを詳しく見て持っている行をハイライトするので、明らかに残念なことです。

この現象の原因は何ですか?どのように修正しますか?

答えて

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> 
関連する問題