XAML DataGrid Background color Change

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    XAML DataGrid Background color Change

    Hey Leute ich kriege es einfach nicht hin...
    Ich fülle mein Datagrid mit daten und will die Hintergrund Farbe ändern wenn die Zahl Größer oder Kleiner ist als 0,85 die in der Zelle steht.

    CS

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Windows;
    4. namespace datagrid
    5. {
    6. /// <summary>
    7. /// Interaktionslogik für MainWindow.xaml
    8. /// </summary>
    9. public partial class MainWindow : Window
    10. {
    11. public List<Double> ValueList1 = new List<Double>();
    12. public MainWindow()
    13. {
    14. InitializeComponent();
    15. ValueList1.Add(0.32);
    16. ValueList1.Add(0.90);
    17. ValueList1.Add(0.23);
    18. ValueList1.Add(0.88);
    19. testvalues john = new testvalues();
    20. john.test1 = ValueList1[0].ToString("P0");
    21. john.test2 = ValueList1[1].ToString("P0");
    22. john.test3 = ValueList1[2].ToString("P0");
    23. john.test4 = ValueList1[3].ToString("P0");
    24. dataGridView1.Items.Add(john);
    25. }
    26. public class testvalues
    27. {
    28. public string test1 { get; set; }
    29. public string test2 { get; set; }
    30. public string test3 { get; set; }
    31. public string test4 { get; set; }
    32. }
    33. }
    34. }


    XAML

    XML-Quellcode

    1. <Window x:Class="datagrid.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:datagrid"
    7. mc:Ignorable="d"
    8. Title="MainWindow" Height="450" Width="800">
    9. <Grid>
    10. <DataGrid Height="243" Margin="142,77,213,99" x:Name="dataGridView1" AutoGenerateColumns="False" >
    11. <DataGrid.Columns>
    12. <DataGridTextColumn Header=" Test1" Width="100" Binding="{Binding test1}" />
    13. <DataGridTextColumn Header=" Test2" Width="100" Binding="{Binding test2}" />
    14. <DataGridTextColumn Header=" Test3" Width="100" Binding="{Binding test3}" />
    15. <DataGridTextColumn Header=" Test4" Width="100" Binding="{Binding test4}" />
    16. </DataGrid.Columns>
    17. </DataGrid>
    18. </Grid>
    19. </Window>


    Das hier ist bisher mein Code, wie kriege ich es nun hin das jede Zelle die Background Color ändert wenn halt die Zahl kleiner oder größer ist ?
    Hab viel im Internet geguckt aber hab nie was richtiges gefunden..
    Ist noch maßlos ausbaufähig, da ich WPF-Anfänger bin, aber hier mal was:

    XML-Quellcode

    1. <Window x:Class="WpfApp1.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. mc:Ignorable="d" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True,Type=local:testvalues}"
    7. xmlns:local="clr-namespace:WpfApp1"
    8. xmlns:Converters="clr-namespace:Converters"
    9. Title="MainWindow" Height="450" Width="800">
    10. <Window.Resources>
    11. <Converters:ValueToColorConverter x:Key="ValueToColorConverter"/>
    12. </Window.Resources>
    13. <Grid>
    14. <DataGrid Name="dataGridView1" AutoGenerateColumns="False">
    15. <DataGrid.Columns>
    16. <DataGridTextColumn Header="Test1" Width="*" Binding="{Binding test1}">
    17. <DataGridTextColumn.ElementStyle>
    18. <Style TargetType="{x:Type TextBlock}">
    19. <Setter Property="Background" Value="{Binding test1, Converter={StaticResource ValueToColorConverter}}" />
    20. </Style>
    21. </DataGridTextColumn.ElementStyle>
    22. </DataGridTextColumn>
    23. <DataGridTextColumn Header="Test2" Width="*" Binding="{Binding test2}">
    24. <DataGridTextColumn.ElementStyle>
    25. <Style TargetType="{x:Type TextBlock}">
    26. <Setter Property="Background" Value="{Binding test2, Converter={StaticResource ValueToColorConverter}}" />
    27. </Style>
    28. </DataGridTextColumn.ElementStyle>
    29. </DataGridTextColumn>
    30. <DataGridTextColumn Header="Test3" Width="*" Binding="{Binding test3}">
    31. <DataGridTextColumn.ElementStyle>
    32. <Style TargetType="{x:Type TextBlock}">
    33. <Setter Property="Background" Value="{Binding test3, Converter={StaticResource ValueToColorConverter}}" />
    34. </Style>
    35. </DataGridTextColumn.ElementStyle>
    36. </DataGridTextColumn>
    37. <DataGridTextColumn Header="Test4" Width="*" Binding="{Binding test4}">
    38. <DataGridTextColumn.ElementStyle>
    39. <Style TargetType="{x:Type TextBlock}">
    40. <Setter Property="Background" Value="{Binding test4, Converter={StaticResource ValueToColorConverter}}" />
    41. </Style>
    42. </DataGridTextColumn.ElementStyle>
    43. </DataGridTextColumn>
    44. </DataGrid.Columns>
    45. </DataGrid>
    46. </Grid>
    47. </Window>

    das benötigt einen Konverter, der die Werte in Farben (Brushes) umwandelt:

    C#-Quellcode

    1. namespace Converters
    2. {
    3. public class ValueToColorConverter : IValueConverter
    4. {
    5. public object Convert(object value, Type targetType, object parameter, CultureInfo culture) => (double)value switch
    6. {
    7. < 0 => Brushes.Red,
    8. 0 => Brushes.Aqua,
    9. > 0 => Brushes.Green,
    10. _ => Brushes.Black,
    11. };
    12. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    13. {
    14. throw new NotImplementedException();
    15. }
    16. }
    17. }


    btw: Deine Strings habe ich mal in doubles umgeändert, da sonst ein Datenvergleich etwas komisch wird.
    Wie Du sehen wirst, habe ich erstmal die Grenzen < 0 -> rot, = 0 -> blau, > 0 -> grün gewählt.

    Ach ja: Keine Ahnung, was da VS heutzutage aus dem switch-Block in der Methode Convert zaubert, aber das ist mir momentan auch ziemlich Hupe.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()