Change the color of a Row in a GridView

2

Good morning,

I am developing a program in Framework 3.5 in WPF (xaml) and the problem that arises is that when you want to change the color of a line from the class code, when the grid already has the data that I want to show, I can not find the way.

XAML code:

    <ListView.View>
        <GridView>
            <GridViewColumn Header="#" DisplayMemberBinding="{Binding Path=position}" my:clsGridViewSort.PropertyName="position"></GridViewColumn>
            <GridViewColumn Header="{x:Static prop:Properties.Resources.NombreArchivo}" DisplayMemberBinding="{Binding Path=filename}" my:clsGridViewSort.PropertyName="filename" />
            <GridViewColumn Header="{x:Static prop:Properties.Resources.FechaInicio}" DisplayMemberBinding="{Binding Path=startdate}" my:clsGridViewSort.PropertyName="startdate" />
            <GridViewColumn Header="{x:Static prop:Properties.Resources.FechaFin}" DisplayMemberBinding="{Binding Path=enddate}" my:clsGridViewSort.PropertyName="enddate"/>
            <GridViewColumn Header="{x:Static prop:Properties.Resources.UltimaCopia}" DisplayMemberBinding="{Binding Path=lastbackup}" my:clsGridViewSort.PropertyName="lastbackup"/>
            <GridViewColumn Header="{x:Static prop:Properties.Resources.Estado}" DisplayMemberBinding="{Binding Path=state}" my:clsGridViewSort.PropertyName="state"/>
            <GridViewColumn Header="{x:Static prop:Properties.Resources.Periodicidad}" DisplayMemberBinding="{Binding Path=period}" my:clsGridViewSort.PropertyName="period"/>
            <GridViewColumn Header="{x:Static prop:Properties.Resources.Ruta}" DisplayMemberBinding="{Binding Path=path}" my:clsGridViewSort.PropertyName="path"/>
            <GridViewColumn Header="{x:Static prop:Properties.Resources.EspacioActual}" DisplayMemberBinding="{Binding Path=actualsize}" my:clsGridViewSort.PropertyName="actualsize"/>
        </GridView>
    </ListView.View>
    
asked by Marc 04.07.2017 в 14:39
source

2 answers

3

In this example the gridview rows change color according to the status value (3: red, 2: yellow)

    <Window x:Class="WpfCambiarColorRowGridview.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListView Margin="10" Name="lvUsers">
            <ListView.Resources>
                <Style TargetType="{x:Type ListViewItem}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Estado}" Value="3">
                            <Setter Property="Background" Value="Red" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Estado}" Value="2">
                            <Setter Property="Background" Value="Yellow" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListView.Resources>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="NombreArchivo" DisplayMemberBinding="{Binding NombreArchivo}" />
                    <GridViewColumn Header="FechaInicio" Width="120" DisplayMemberBinding="{Binding FechaInicio}" />
                    <GridViewColumn Header="Estado" Width="50" DisplayMemberBinding="{Binding Estado}" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

Code behind:

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Documents;

namespace WpfCambiarColorRowGridview
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            List<Archivo> items = new List<Archivo>();
            items.Add(new Archivo() { NombreArchivo = "file01.txt", FechaInicio = new DateTime(2017,7,1), Estado = 1 });
            items.Add(new Archivo() { NombreArchivo = "file02.txt", FechaInicio = new DateTime(2017, 7, 2), Estado = 2 });
            items.Add(new Archivo() { NombreArchivo = "file03.txt", FechaInicio = new DateTime(2017, 7, 3), Estado = 3 });
            lvUsers.ItemsSource = items;
        }
    }

    public class Archivo
    {
        public string NombreArchivo { get; set; }

        public DateTime FechaInicio { get; set; }

        public int Estado { get; set; }
    }
}

Result:

    
answered by 04.07.2017 / 16:45
source
0

You can also do something like:

<Border Name="ClearButtonBorder" Grid.Column="1" CornerRadius="0,3,3,0">
        <Border.Style>
            <Style>
                <Setter Property="Border.Background" Value="Blue"/>
                <Style.Triggers>
                    <Trigger Property="Border.IsMouseOver" Value="True">
                        <Setter Property="Border.Background" Value="Green" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="X" />
    </Border>

this would be a trigger for mauseover.

    
answered by 04.07.2017 в 16:21