2016-12-28 1 views
1

Ich schreibe eine schnelle und schmutzige WPF-Anwendung als ein vollständiger WPF-Neuling. Ich habe eine einfache Datenraster:Kein Text ist sichtbar, wenn eine Zelle in WPF-Datagrid markiert wird

<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> 

Das Datagrid wird durch einen einfachen IValueConverter gefärbt, die von Tutorials und Stack-Überlauf zu Lasten von Beispielen praktisch identisch ist:

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(); 
    } 
} 

Die IValueConverter funktioniert genau wie es sein sollte , aber es führt einen seltsamen Nebeneffekt ein: das Auswählen einer Zeile macht alle Werte in seinen Zellen verschwinden. Die Werte sind immer noch vorhanden, da das Ändern der Auswahl oder das Doppelklicken auf eine Zelle sie wieder sichtbar macht (siehe .gif unten).

screen capture of problematic behaviour, recorded with GifCam

Das ist natürlich bedauerlich, da man in der Regel eine Reihe hebt einen genaueren Blick auf seine Daten zu haben.

Was verursacht dieses Verhalten und wie behebe ich es?

Antwort

3

eine Ressource hinzufügen (SystemColors.HighlightTextBrushKey), die den Text Pinsel etwas ändert dunkler, so dass Sie tatsächlich den Text sehen können:

<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> 
Verwandte Themen