Как выделить элемент ListBox другим цветом

142
24 февраля 2022, 07:20

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

Answer 1

Тут я вижу 3 варианта решения:

  1. Переписать ListBox, ну или сделать для него расширения (что для меня одно и тоже).
  2. В классе объекта, который выводите, сделать свойство. В Xaml проверяете это свойство при помощи триггера и задаете нужный цвет.
  3. Использовать AlternationCount.

Я вам покажу пример с использованием AlternationCount:

<ListBox AlternationCount="99999">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Background" Value="Gray"/>
            <Style.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                    <Setter Property="Background" Value="Green"/>
                </Trigger>
                <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                    <Setter Property="Background" Value="Yellow"/>
                </Trigger>
                <Trigger Property="ItemsControl.AlternationIndex" Value="2">
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBoxItem/>
    <ListBoxItem/>
    <ListBoxItem/>
    <ListBoxItem/>
    <ListBoxItem/>
</ListBox>

Как видите тут нечего сложного нет:

  • Задается AlternationCount. Тут смотрите сами какое число должно быть. Указанное тут число по сути означает на сколько частей вы разделяете все элементы. К примеру у вас в ListBox 10 элементов, вы указываете 3, значит индекс у вас будет идти как 0-1-2-0-1-2-0-1-2-0, то есть указанные вами цвета будут повторяться. Если вы укажете число больше, чем кол-во элементов в списке, то уже будет 0-1-2-3-4-5-6-7-8-9-10..., то есть каждый элемент получит свой индекс, по которому вы сможете задать нужный вам вид.
  • <Trigger Property="ItemsControl.AlternationIndex" Value="0"> - Вот тут я думаю все и так понятно. Мы первому элементу (0-й индекс) задаем цвет.

Ну и итог всего этого (первые 3 с нужным цветом, а остальные серые):

READ ALSO
Очистить кэш Redis программно

Очистить кэш Redis программно

В своём приложении я использую Redis в качестве кэш-хранилища, куда в процессе работы заносятся разные данныеНекоторые хранятся там временно...

87
Как реализовать алгоритм заливки в Unity?

Как реализовать алгоритм заливки в Unity?

У меня есть заготовка игры

117
Почему возникает NullReferenceException? [дубликат]

Почему возникает NullReferenceException? [дубликат]

Выполняю одно из заданий курса по С#, которое звучит так:

93
групировка по нескольким столбцам c#

групировка по нескольким столбцам c#

Надо программно сделать аналог метода group by по нескольким полям на язык с #, но проблема в том, что эти поля заранее не определены, и в зависимости...

97