How to change the color of a ListView column (each cell of each row) seperately in WPF?
I have a ListView that regularly update and show some analyzed data.
Each row represent a different source and the columns show it’s analyzed values. What I want is to only change the Background color or Font Color of a single cell if a certain criteria is met. For example if the «Price» Column value become less than X, it will change into Red Color background or font.
But I don’t want the whole row to be changing color, but only the «Price» Column of that certain row. I know how to change the color of a whole row, there has been many example of that in here as well, for example using binding. But I want to know if there is anyway to just change the Background Color or Font Color of a single Cell. Thanks. Edit:
Thanks to Sean Manton’s Reply, I solved this problem pretty easily. It’s surprising that I had so much problem finding any result in my searches for this, so I added my own answer with a working example as well.
asked Feb 24, 2022 at 21:09
303 1 1 gold badge 3 3 silver badges 16 16 bronze badges
2 Answers 2
GridViewColumn has a CellTemplate property that you can point to a DataTemplate for the cells. In the DataTemplate you can use a Binding Converter to map the values to the desired styling.
answered Feb 24, 2022 at 21:49
Sean Manton Sean Manton
136 7 7 bronze badges
Thanks for the answer, Not sure how I missed this when I searched for changing the color of a column/cell for several hours, but after I checked CellTemplate property, I solved it easily and even made a reply with an example of it, maybe it help someone else next time 😀
Как изменить цвет listview wpf
Народ, как изменить цвет селектора ListView при условии что контрол находится не в фокусе, или это импасибл.
Re: C# Как изменить цвет селектора неактивного ListView
| От: | Dron247 |
| Дата: | 08.02.11 01:18 |
| Оценка: |
Здравствуйте, alexparser, Вы писали:
A>Приветствую!
A>Народ, как изменить цвет селектора ListView при условии что контрол находится не в фокусе, или это импасибл.
A>Сенькс!
Wut?? Ты хоть картинок запили со стрелочками, ниче не понял че те надо. Ты про обводку вокруг выбранного элемента?
Твой IP на моем юзербаре
Re[2]: C# Как изменить цвет селектора неактивного ListView
| От: | Codechanger |
| Дата: | 08.02.11 07:06 |
| Оценка: |
Здравствуйте, Dron247, Вы писали:
D>Здравствуйте, alexparser, Вы писали:
A>>Приветствую!
A>>Народ, как изменить цвет селектора ListView при условии что контрол находится не в фокусе, или это импасибл.
A>>Сенькс!
D>Wut?? Ты хоть картинок запили со стрелочками, ниче не понял че те надо. Ты про обводку вокруг выбранного элемента?
Еще можно было бы озвучить технологии.
Re: C# Как изменить цвет селектора неактивного ListView
| От: | андрей_к |
| Дата: | 08.02.11 08:06 |
| Оценка: |
A>Народ, как изменить цвет селектора ListView при условии что контрол находится не в фокусе, или это импасибл.
и соответственно у листа
ItemContainerStyle=""
Re[3]: C# Как изменить цвет селектора неактивного ListView
| От: | Dron247 |
| Дата: | 08.02.11 08:09 |
| Оценка: |
Здравствуйте, Codechanger, Вы писали:
C>Еще можно было бы озвучить технологии.
Точно, еще-ж технологии, пересаживаюсь на wpf в последнее время, даже мысли такой не возникло Оно-ж и в винформсе, и в впф, и в gtk# и в webforms. Короче ждем-с
Твой IP на моем юзербаре
Re[2]: C# Как изменить цвет селектора неактивного ListView
| От: | alexparser |
| Дата: | 08.02.11 15:11 |
| Оценка: |
Здравствуйте, андрей_к, Вы писали:
Да, я проект на VS2008 C#, еще вопрос, а как теперь применить к ListView этот XML код?
Re[3]: C# Как изменить цвет селектора неактивного ListView
| От: | Dron247 |
| Дата: | 09.02.11 01:46 |
| Оценка: |
Здравствуйте, alexparser, Вы писали:
A>Здравствуйте, андрей_к, Вы писали:
A>Да, я проект на VS2008 C#, еще вопрос, а как теперь применить к ListView этот XML код?
A>Спасибо
Эмм. срочно сделай скриншот студии, где открыта твоя форма, иначе нет смысла говорить дальше
Твой IP на моем юзербаре
Re[4]: C# Как изменить цвет селектора неактивного ListView
| От: | alexparser |
| Дата: | 09.02.11 20:57 |
| Оценка: |
Здравствуйте, Dron247, Вы писали:
D>Здравствуйте, alexparser, Вы писали:
A>>Здравствуйте, андрей_к, Вы писали:
A>>Да, я проект на VS2008 C#, еще вопрос, а как теперь применить к ListView этот XML код?
A>>Спасибо
D>Эмм. срочно сделай скриншот студии, где открыта твоя форма, иначе нет смысла говорить дальше
Вот скрин студии с нужным ListView.
Re[5]: C# Как изменить цвет селектора неактивного ListView
| От: | Dron247 |
| Дата: | 10.02.11 02:32 |
| Оценка: |
Здравствуйте, alexparser, Вы писали:
Это WindowsForms, в будущем указывайте используемые технологии в заголовке или в посте.
Для винформса вам придется: либо использовать сторонний компонент, либо писать свой, на основе этого, и переопределять цвет выделения (например добавить свойство, определяющее цвет, и при использовании указывать желаемый).
Твой IP на моем юзербаре
Re[6]: C# Как изменить цвет селектора неактивного ListView
| От: | alexparser |
| Дата: | 10.02.11 10:32 |
| Оценка: |
Здравствуйте, Dron247, Вы писали:
D>Здравствуйте, alexparser, Вы писали:
D>Это WindowsForms, в будущем указывайте используемые технологии в заголовке или в посте.
D>Для винформса вам придется: либо использовать сторонний компонент, либо писать свой, на основе этого, и переопределять цвет выделения (например добавить свойство, определяющее цвет, и при использовании указывать желаемый).
Это понятно, но что конкретно.
Вот человек предложил xaml, а как его применить к ListView, если можно что-то конкретное.
Re[7]: C# Как изменить цвет селектора неактивного ListView
| От: | HowardLovekraft |
| Дата: | 10.02.11 11:58 |
| Оценка: |
Здравствуйте, alexparser, Вы писали:
A>Вот человек предложил xaml, а как его применить к ListView, если можно что-то конкретное.
Если речь о ListView из WinForms, то установите ListView.OwnerDraw в значение true, добавьте обработчики событий DrawItem, DrawSubItem и DrawColumnHeader, и там рисуйте, все, что душе угодно.
Если вы все еще хотите применить предложенный XAML, то выбрасывайте Windows Forms и начинайте осваивать WPF.
Re[8]: C# Как изменить цвет селектора неактивного ListView
| От: | Sergey_BG |
| Дата: | 10.02.11 15:13 |
| Оценка: |
Здравствуйте, HowardLovekraft, Вы писали:
HL>Если речь о ListView из WinForms, то установите ListView.OwnerDraw в значение true, добавьте обработчики событий DrawItem, DrawSubItem и DrawColumnHeader, и там рисуйте, все, что душе угодно.
public partial class MyListViewN : ListView < public MyListView() < InitializeComponent(); OwnerDraw = true; > // Пока он рисуется как и раньше, но здесь в случае если элемент выбранный можно поменять алгоритм // "e" содержит функции которые помогут это сделать. protected override void OnDrawItem(DrawListViewItemEventArgs e) < e.DrawDefault = true; base.OnDrawItem(e); > protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) < e.DrawDefault = true; base.OnDrawSubItem(e); > protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e) < e.DrawDefault = true; base.OnDrawColumnHeader(e); > >
Стили и шаблоны элемента ListView
В этом разделе описываются стили и шаблоны для элемента управления ListView. Можно изменять свойства ControlTemplate, заданные по умолчанию, чтобы придать элементу управления уникальный внешний вид. Дополнительные сведения см. в разделе Создание шаблона для элемента управления.
Компоненты элемента управления ListView
У элемента управления ListView нет именованных компонентов.
При создании шаблона ControlTemplate для элемента управления ListView в шаблоне может находиться объект ItemsPresenter внутри объекта ScrollViewer. (ItemsPresenter отображает все элементы объекта ListView, а ScrollViewer обеспечивает прокрутку в пределах элемента управления.) Если ItemsPresenter не является непосредственным дочерним элементом ScrollViewer, то для ItemsPresenter необходимо задать название, ItemsPresenter .
Состояния элемента управления ListView
В следующей таблице представлены визуальные состояния для элемента управления ListView.
| Имя VisualState | Имя VisualStateGroup | Description |
|---|---|---|
| Действительно | ValidationStates | Элемент управления использует класс Validation, и присоединенное свойство Validation.HasError имеет значение false . |
| InvalidFocused | ValidationStates | Присоединенное свойство Validation.HasError имеет значение true , если у элемента управления есть фокус. |
| InvalidUnfocused | ValidationStates | Присоединенное свойство Validation.HasError имеет значение true , если у элемента управления нет фокуса. |
Компоненты элемента управления ListViewItem
У элемента управления ListViewItem нет именованных компонентов.
Состояния элемента управления ListViewItem
В следующей таблице представлены состояния для элемента управления ListViewItem.
| Имя VisualState | Имя VisualStateGroup | Description |
|---|---|---|
| Норм. | CommonStates | Состояние по умолчанию. |
| Выключено | CommonStates | Элемент управления отключен. |
| MouseOver | CommonStates | Указатель мыши на элементе управления ComboBox. |
| Режим фокусировки | FocusStates | Элемент управления имеет фокус. |
| Без фокуса ввода | FocusStates | Элемент управления не имеет фокуса. |
| Выбрано | SelectionStates | Элемент выбран. |
| не выбрано | SelectionStates | Элемент не выбран. |
| SelectedUnfocused | SelectionStates | Элемент выбран, но не имеет фокуса. |
| Действительно | ValidationStates | Элемент управления использует класс Validation, и присоединенное свойство Validation.HasError имеет значение false . |
| InvalidFocused | ValidationStates | Присоединенное свойство Validation.HasError имеет значение true , если у элемента управления есть фокус. |
| InvalidUnfocused | ValidationStates | Присоединенное свойство Validation.HasError имеет значение true , если у элемента управления нет фокуса. |
Пример шаблона элемента управления для ListView
В следующем примере показано, как определить шаблон ControlTemplate для элемента управления ListView и соответствующие типы.
В примере шаблона ControlTemplate используется один или несколько из следующих ресурсов.
#FFE8EDF9 #FFC5CBF9 #FF7381F9 #FFE8EDF9 #FFC5CBF9 #FF888888 #FFC5CBF9 #FFDDDDDD White #FF7381F9 #FF211AA9 #FF3843C4 #FF211AA9 #FF444444 sc#1, 0.004391443, 0.002428215, 0.242281124 #FFCCCCCC #FF888888 #FF444444 #FF888888 #FF444444 #FFAAAAAA #FF888888 Black #FFC5CBF9 Black #FFC5CBF9 #FF3843C4 " Offset="0" /> " Offset="0.5" /> " Offset="1" />
См. также
- Style
- ControlTemplate
- Стили и шаблоны элемента управления
- Настройка элементов управления
- Стилизация и использование шаблонов
- Создание шаблона для элемента управления
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
How to color each row in listView in wpf ?
First i click the button to add the items to the listView then i click the button1 to color the items.
If i’m just making in the button1 click event :
System.Windows.Media.SolidColorBrush bb = new SolidColorBrush(); bb.Color = Colors.Red; ChangeRowColor(1, bb);
it will color the first row in index 1 at red.
but i want to make some changes and add some stuff.
i want to make the loop of changing the colors in a thread that’s why i’m using async Task.
i want few things to do :
- to make the loop of colors changing in a thread so it will not freeze the whole application.
- to make it to change each row to a different random color each time nonstop.
- first to make it once i can’t make it to change each row in a different color. if i’m using this loop in a regular button click event it will color all the row’s in the same random picked color.
- i want that each row will have another color ! and then to make it in a thread and also to make it nonstop changing the colors maybe using a timer ?
another problem is that i’m getting error on line 25 in the Mainwindow.xaml
Severity Code Description Project File Line Suppression State
Error CS0407 ‘Task MainWindow.Button_Click_1(object, RoutedEventArgs)’ has the wrong return type Lab-ListView C:\Lab-ListView-master\Lab-ListView-master\Lab-ListView\MainWindow.xaml 25 Active
Windows Presentation Foundation
A part of the .NET Framework that provides a unified programming model for building line-of-business desktop applications on Windows.
2,673 questions
Sign in to follow
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,259 questions
Sign in to follow
A language based on Extensible Markup Language (XML) that enables developers to specify a hierarchy of objects with a set of properties and logic.
764 questions
Sign in to follow
0 comments No comments Report a concern
I have the same question 0
Accepted answer

Peter Fleischer (former MVP) 19,231 Reputation points
2023-01-05T20:11:50.027+00:00
Hi,
try following demo as MVVM with your code:
" CommandParameter="AddBtn_Click"/> " Width="Auto"/> " Width="Auto"/> " Width="Auto"/> " Width="Auto"/> " Width="Auto"/> " CommandParameter="Button_Click"/> " CommandParameter="Button_Click_1"/>
and ViewModel:
using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Reflection; using System.Runtime.CompilerServices; using System.Threading.Tasks; using System.Windows; using System.Windows.Data; using System.Windows.Input; using System.Windows.Media; namespace WpfApp116 < public class ViewModel : ICommand, INotifyPropertyChanged < private CollectionViewSource cvs = new CollectionViewSource(); private ObservableCollectioncol = new ObservableCollection(); public ICollectionView View < get =>cvs.View; > public event EventHandler CanExecuteChanged; public bool CanExecute(object parameter) => true; public async void Execute(object parameter) < switch (parameter.ToString()) < case "AddBtn_Click": break; case "Button_Click": for (int i = 1; i < 20; i++) < Device dev = new Device() < IP = "1.1.1.1", Ping = "30ms", DNS = "XYZ", MAC = "2F:3C:5F:41:F9", Manufacturer = "Intel" >; col.Add(dev); > cvs.Source = col; OnPropertyChanged(nameof(View)); break; case "Button_Click_1": await Main(); break; default: break; > > Random random = new Random(); private async Task Main() < await Task.Run(() =>< // Just loop. foreach (Device dev in col) dev.BackgroundColor = PickRandomBrush(random); >); > private Brush PickRandomBrush(Random rnd) < Brush result = Brushes.Transparent; Type brushesType = typeof(Brushes); PropertyInfo[] properties = brushesType.GetProperties(); int random = rnd.Next(properties.Length); result = (Brush)properties[random].GetValue(null, null); return result; >public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName)); > public class Device : INotifyPropertyChanged < public string IP < get; set; >public string Ping < get; set; >public string DNS < get; set; >public string MAC < get; set; >public string Manufacturer < get; set; >private Brush _backgroundColor; public Brush BackgroundColor < get =>this._backgroundColor; set < this._backgroundColor = value; OnPropertyChanged(); >> public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName)); > >