Разный цвет строк в элементе управления ListBox в WPF

Автор: Диптимайя Патра (Diptimaya Patra)

В этой статье будет показано, как можно создать строки разного цвета в элементе управления ListBox в WPF.

Создание проекта WPF

Запустите Visual Studio 2008 и создайте новый проект WPF. Дайте ему имя ListBoxSampleWPF.

Теперь добавим в приложение элемент управления ListBox, который будет выглядеть следующим образом:

Теперь добавим некоторые демонстрационные данные в элемент управления ListBox.

public class Person

    {

        public string Name { get; set; }

        public int Age { get; set; }

        public string Country { get; set; }

    }

ObservableCollection<Person> myList;

        public Window1()

        {

            InitializeComponent();

            myList = new ObservableCollection<Person>()

            {

                new Person{ Name="Name 1", Age=24, Country="India"},

                new Person{ Name="Name 2", Age=24, Country="India"},

                new Person{ Name="Name 3", Age=24, Country="India"},

                new Person{ Name="Name 4", Age=24, Country="India"},

                new Person{ Name="Name 5", Age=24, Country="India"},

                new Person{ Name="Name 6", Age=24, Country="India"},

                new Person{ Name="Name 7", Age=24, Country="India"},

                new Person{ Name="Name 8", Age=24, Country="India"},

                new Person{ Name="Name 9", Age=24, Country="India"},

                new Person{ Name="Name 10", Age=24, Country="India"},

                new Person{ Name="Name 11", Age=24, Country="India"},

                new Person{ Name="Name 12", Age=24, Country="India"},

                new Person{ Name="Name 13", Age=24, Country="India"},

                new Person{ Name="Name 14", Age=24, Country="India"},

                new Person{ Name="Name 15", Age=24, Country="India"},

                new Person{ Name="Name 16", Age=24, Country="India"},

                new Person{ Name="Name 17", Age=24, Country="India"},

                new Person{ Name="Name 18", Age=24, Country="India"},

                new Person{ Name="Name 19", Age=24, Country="India"},

                new Person{ Name="Name 20", Age=24, Country="India"},

                new Person{ Name="Name 21", Age=24, Country="India"},

                new Person{ Name="Name 22", Age=24, Country="India"},

            };

            lbPersonList.ItemsSource = myList;

        }

Теперь привяжем свойство "Name" к элементу управления ListBox, чтобы можно было видеть имена.

<ListBox x:Name="lbPersonList" Margin="19,17,162,25">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
</ListBox>

Как можно видеть, мы не можем различать каждый ряд; это означает, что цвет фона строки один и тот же — белый.

Теперь следует добавить стиль в ListBoxItem.

<Window.Resources>
        <Style  TargetType="{x:Type ListBoxItem}">
            <Style.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                    <Setter Property="Background" Value="#19f39611"></Setter>
                </Trigger>
                <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                    <Setter Property="Background" Value="#19000000"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
</Window.Resources>
 
<ListBox x:Name="lbPersonList" Margin="19,17,162,25" AlternationCount="2">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
</ListBox>

Теперь запустим приложение.

Да, мы получили разный цвет строк.

Можно задать в качестве AlternationCount значение больше 2 и добавить нужное количество цветов. Тогда повторение цветов можно будет видеть после AlternationCount.

Надеюсь, эта статья будет полезной.