Как изменить цвет listview wpf
Перейти к содержимому

Как изменить цвет listview wpf

  • автор:

Стили и шаблоны элемента 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, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как изменить цвет 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); > >

Как изменить цвет заливки item’а(строки в listview ) в зависимости от атрибута файла?

Как изменить цвет заливки item’а(строки в listview ) в зависимости от атрибута файла? Что нужно исправить? Пробовал делать обращение по индексам, что-то вроде — «listView1.Items[0].SubItems[0].BackColor = Color.Yellow», но выскакивает ошибка:

Дополнительные сведения: InvalidArgument=Значение ‘0’ недопустимо для ‘index’.

#####################################################################################
Задача программы такая: по нажатию на button1 на listview1 должен произойти вывод файлов, находящихся в папке. Причем строки с именами файлов должны быть закрашены желтым цветом если у файла атрибут — «Только для чтения»

using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication4 < public partial class Form1 : Form < public Form1() < InitializeComponent(); textBox1.Text = "tracing"; >StringBuilder result = new StringBuilder(); String str; int index = 0; byte[] buffer = new byte[511]; String word; private void button1_Click(object sender, EventArgs e) < FolderBrowserDialog FBD = new FolderBrowserDialog(); listView1.Items.Clear(); FBD.ShowNewFolderButton = false; FBD.Description = "Выберите папку. "; if (FBD.ShowDialog() == DialogResult.OK) < string[] allFoundFiles = Directory.GetFiles(FBD.SelectedPath, "*.txt", SearchOption.TopDirectoryOnly); foreach (string file in allFoundFiles) < listView1.Items.Add(file); FileAttributes fA = File.GetAttributes(file); if ((fA & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) listView1.Items[0].BackColor = Color.Yellow; >> > private int wordEntry(ref StringBuilder result, ref String word) < int n = 0, k = 0, count = 0; while (result.Length != n) < if (result[n] == word[k]) < if (k == word.Length - 1) < count++; k = -1; >n++; k++; > else < n++; k = 0; >> return count; > private void button2_Click(object sender, EventArgs e) < word = textBox1.Text; FileInfo f = new FileInfo(str); using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read)) < using (BinaryReader br = new BinaryReader(fs)) //Array.Clear(buffer, 0, buffer.Length); > MessageBox.Show(wordEntry(ref result, ref word).ToString());// > > > private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) < str = e.Item.Text; >> >
  • Вопрос задан более трёх лет назад
  • 1471 просмотр

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 :

  1. to make the loop of colors changing in a thread so it will not freeze the whole application.
  2. to make it to change each row to a different random color each time nonstop.
  3. 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.
  4. 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,678 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,288 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.

767 questions
Sign in to follow
0 comments No comments Report a concern
I have the same question 0 votes
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)); > > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *