Как то всегда пользовался для отображения данных, в которых имеет смысл раскрашивать цвет фона через строчку DataGrid, а в нем все просто. Есть два замечательных свойства RowBackground и AlternatingRowBackground. Задаешь их и все работает. Если нужно на основе данных отображаемых в строках, то это тоже все просто, через Converter. А вот что делать, если через строчку надо раскрасить фон в ListBox?
Как оказалось, все достаточно просто.
У ListBox есть замечательное свойство AlternationCount которое позволяет задать периодичность изменения раскраски. Если нам нужно строка белая, потом серая, потом опять белая, то записываем в него 2. Если нам нужно чередовать больше цветов, то указываем их количество. Ну а дальше, задаем стиль, который через присоединенное свойство ItemsControl.AlternationIndex определяет каким по счету в рамках одного периода смены цвета является текущий ListBoxItem. Например, AlternationCount = 3. В этом случае у у первого ListBoxItem свойство AlternationIndex = 0, у второго 1, у третьего 2, у четвертого опять 0 и т.д.
Ну и небольшая демка:
Как оказалось, все достаточно просто.
У ListBox есть замечательное свойство AlternationCount которое позволяет задать периодичность изменения раскраски. Если нам нужно строка белая, потом серая, потом опять белая, то записываем в него 2. Если нам нужно чередовать больше цветов, то указываем их количество. Ну а дальше, задаем стиль, который через присоединенное свойство ItemsControl.AlternationIndex определяет каким по счету в рамках одного периода смены цвета является текущий ListBoxItem. Например, AlternationCount = 3. В этом случае у у первого ListBoxItem свойство AlternationIndex = 0, у второго 1, у третьего 2, у четвертого опять 0 и т.д.
Ну и небольшая демка:
<ListBox AlternationCount="2">
<ListBox.Resources>
<Style TargetType="{x:Type
ListBoxItem}">
<Setter Property="Background"
Value="Blue"/>
<Setter Property="Foreground"
Value="White"/>
<Style.Triggers>
<Trigger Property="ListBox.AlternationIndex"
Value="1">
<Setter Property="Background"
Value="White"/>
<Setter Property="Foreground"
Value="Black"/>
</Trigger>
<Trigger Property="ListBox.AlternationIndex"
Value="0">
<Setter Property="Background"
Value="DarkBlue"/>
<Setter Property="Foreground"
Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.Resources>
<ListBoxItem>1</ListBoxItem>
<ListBoxItem>2</ListBoxItem>
<ListBoxItem>3</ListBoxItem>
<ListBoxItem>4</ListBoxItem>
<ListBoxItem>5</ListBoxItem>
<ListBoxItem>6</ListBoxItem>
</ListBox>
Вот так это выглядит:
На мой взгляд, все достаточно просто.
Комментариев нет:
Отправить комментарий