none
WPF DataGrid alternierenden Hintergrund beibehalten und trotzdem Zellenhintergrund ändern RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,

    ich "quäle" mich schon seit einiger Zeit mit folgendem Szenario:

    Ich habe ein DataGrid mit einer Datenbindung. Innerhalb der Daten gibt es ein Flag, was anzeigt dass der Wert OK ist oder eben nicht. Das DataGrid wird zur besseren Übersicht mit alternierendem Hintergrund dargestellt. Nun habe ich einen CellStyle hinzugefügt und diesen mit einem Converter verbunden. Dieser Converter prüft mein Flag (OK / !OK) und setzt je nach Zustand den Hintergrund meiner Zelle. Soweit ist das kein Problem und funktioniert super.

    Das Problem ist vielmehr die Tatsache, dass der CellStyle anscheinend über dem alternierenden Background steht. Der alternierende Background wird mit der Row-Property umgesetzt, ohne direkte Trigger. Der CellStyle sieht folgendermaßen aus:

              <DataGridTextColumn.CellStyle>
                <Style TargetType="{x:Type DataGridCell}">
                  <Setter Property="Background">
                    <Setter.Value>
                      <Binding Converter="{StaticResource myCellConverter}"/>
                    </Setter.Value>
                  </Setter>
                </Style>
              </DataGridTextColumn.CellStyle> 
    

    Mein Converter so:

      public class MyCellConverter : System.Windows.Data.IValueConverter
      {
        #region IValueConverter Members
    
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
          MyValue myValue = value as MyValue;
          if (myValue != null)
          {
            if (!myValue.OK)
            {
              return Brushes.Red;
            }
          }
          return Brushes.White;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
          throw new NotImplementedException();
        }
    
        #endregion
      }
    


    Das funktioniert wie gesagt alles soweit.

    Nur wenn der Wert OK ist, dann wird als Zellenhintergrund Brushes.White geliefert. Diese Tatsache überschreibt nun meinen alternierenden Hintergrund.

    Weiss jemand wie ich das lösen kann?

    Ich habe es bereits mit DataTriggern und Mutlitriggern versucht. Das Problem dass ich jedes mal habe ist die unterschiedliche Zugehörigkeit der Properties. Alternierender Background gehört zur Row und der Zellenhintergrund eben zur Zelle :-/

    Hat jemand einen Rat wie sowas gelöst werden kann?

    Vielen Dank schon mal.

    Brinal

    Sonntag, 26. Juni 2011 17:12

Alle Antworten

  • Hast du mal einen transparenten Brush zurückgegeben?

     

    Montag, 27. Juni 2011 07:04
    Beantworter
  • Hallo,

    sorry dass ich jetzt erst antworte, aber ich habe immer auf eine Email-Benachrichtigung gewartet, aber die kommt anscheinend nicht.

    Danke für den Hinweis! Hat das Problem gelöst, doch leider ist dadurch ein neues entstanden:

    Der alternierende Hintergrund ist mit dem transparenten Brush wieder hergestellt, aber bei Klick in die Zeile verhält sich der Hintergrund nun merkwürdig.

    Ich werde morgen versuchen den Rowstyle anzupassen und mich dann mit dem dadurch gewonnenen Ergebnis noch mal melden.

    Grüße

    Brinal

    Donnerstag, 30. Juni 2011 19:22
  • Hallo zusammen,

    also ich habe bis dato keine Lösung gefunden :-(

    Rowstyle wenn Zeile ausgewählt kann ich anpassen, aber dabei ändert sich nichts an dem Zellen Hintergrund der zuvor geändert wurde. Bzw. "ändert sich nichts" ist so nicht richtig, da der Hintergrund immer auf weiß geht und somit den Text unsichtbar macht. Ändere ich durch einen Trigger bei CellSelected den Hintergrund und die Schriftfarbe, greift zwar die Schriftfarbe aber leider nicht der Hintergrund. Auch mit dem Trigger bleibt der Hintergrund auf weiß, und ich habe keine Ahnung woher dieser weisse Hintergrund kommt, da ich ja entweder Rot (bei !OK) oder eben transparent zurückgebe.

    Was kann ich noch probieren? Irgendwelche Ideen?

    Grüße

    Brinal

    Samstag, 2. Juli 2011 19:46
  • Hier Vielleicht Hilft Dir der Link weiter, scheint dass zu sein was du brauchst.

     

    http://asimsajjad.blogspot.com/2010/09/changing-background-color-of-datagrid.html
    Donnerstag, 7. Juli 2011 06:05
  • Das mit dem DataTrigger wäre auch eine Lösung.

    Wenn du Transparent zurückgibst, poste doch mal den Rowstyle.

    Donnerstag, 7. Juli 2011 06:29
    Beantworter