Laden...

WPF - Datagrid - Foreground von Zellen einer bestimmten Spalte je nach Wert einfärben

Erstellt von sytax vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.026 Views
S
sytax Themenstarter:in
9 Beiträge seit 2019
vor 5 Jahren
WPF - Datagrid - Foreground von Zellen einer bestimmten Spalte je nach Wert einfärben

Hallo erstmal,

ich bin schon seit einigen stunden am suchen und habe keine lösung gefunden wie ich das im betreff beschriebene erreichen kann in einem datagrid.

hier erstmal etwas code zum einbinden einer ressource. diese soll mir einen farbwert
im format #FFFFFF zurückgeben.


<Page.Resources>
        <local:CellConverter x:Key="CellConverter"/>
</Page.Resources>

hier der zugehörige code:


public class CellConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string input = value as string;
            SearchPlayer sp = new SearchPlayer();
            string wrc = sp.WinRateColor(input);
            return wrc;           
            
        }

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

und hier der zugehörige XAML teil. ergebniss ist das garnix passiert das datagrid funktioniert aber es wird halt nix eingefärbt. da ich schon stunden suche und etliches ausprobiert habe und mein hirn kaum noch was vernünftiges ausspuckt hoffe ich das jemand meine fehler findet. oder eine andere lösung hat. herzlichen dank.


<DataGridTextColumn Header="WinRate" Width="90" Binding="{Binding winrate}" IsReadOnly="True">
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="Background" Value="#FF292929"/>
                                <Setter Property="Foreground" Value="AntiqueWhite"/>
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                        <DataGridTextColumn.CellStyle>
                            <Style TargetType="{x:Type DataGridCell}">
                                <Setter Property="Foreground" Value="{Binding CellConverter}"/>
                            </Style>
                        </DataGridTextColumn.CellStyle>

5.657 Beiträge seit 2006
vor 5 Jahren

Du mußt dem Converter auch einen Wert übergeben. Siehe z.B. [Artikel] MVVM und DataBinding, Strg-F "BoolToVisibilityConverter". Wenn es nicht funktioniert, dann kannst du den Code auch debuggen, siehe dazu den Abschnitt "Debugging" in dem verlinkten Artikel.

Weeks of programming can save you hours of planning

S
sytax Themenstarter:in
9 Beiträge seit 2019
vor 5 Jahren

Du mußt dem Converter auch einen Wert übergeben. Siehe z.B.
>
, Strg-F "BoolToVisibilityConverter". Wenn es nicht funktioniert, dann kannst du den Code auch debuggen, siehe dazu den Abschnitt "Debugging" in dem verlinkten Artikel.

so ganz werde ich da noch nicht schlau draus. genau mein problem ist es dem converter den wert der in die zelle geschrieben wird dort auszulesen und zu übergeben.

ich habe das jetzt erstmal statisch versucht (nicht wundern, habe den xaml code etwas verändert)


 <DataGridTextColumn.ElementStyle>
          <Style TargetType="TextBlock">
               <Setter Property="Foreground" Value="#FF56fd67"/>
          </Style>
  </DataGridTextColumn.ElementStyle>

als ergebniss bekomme ich dann natürlich alle zellen in dieser spalte in derselben farbe.
ich habe schon etliche sachen probiert um das "Value" feld anders zu befüllen. keiner hat funktioniert.
die zelle hält einen float wert im format "00.00" je nachdem wie der wert ist soll der foreground eine andere farbe annehmen. das bekomme ich einfach nicht hin ......

wäre echt glücklich wenn mich da jemand erleuchten könnte

grüße

S
sytax Themenstarter:in
9 Beiträge seit 2019
vor 5 Jahren

ok, nachdem ich nochmal über den artikel gelesen habe ist der groschen gefallen und es funktioniert wie erwartet.
thread kann geschlossen werden-

großen großen dank an MrSparkle der mich mit beabsichtigtem lerneffekt drauf gestossen hat.

grüße