Установка цвета фона отдельных элементов списка WPF - PullRequest
0 голосов
/ 11 сентября 2011

Я хочу установить цвет фона отдельно для каждого элемента в WPF ListBox. например Если я добавляю виджеты в ListBox, я могу установить цвет фона для каждого из них в зависимости от типа виджета. Это должно быть сделано в коде (не XAML), так как я знаю только, что это за элементы во время выполнения.

Я знаю, как использовать ItemContainerStyle, чтобы установить стиль для всех элементов, но как вы делаете это отдельно для каждого элемента?

Ответы [ 2 ]

1 голос
/ 11 сентября 2011

Да, вы устанавливаете ItemContainerStyle , используя StyleSelector .

Этот пример на MSDN - именно то, что вы ищете.

0 голосов
/ 11 сентября 2011

Есть много способов сделать это.

Один из них - использовать StyleSelector, как предполагает loxxy. Это довольно мало в моем списке, потому что такой код труднее читать (ну, находить) и тестировать, чем хотелось бы.

Другой вариант - использовать DataTrigger в стиле. Это просто, если (и только если) все элементы реализуют общее свойство, которое можно использовать в триггере. Возможно, вам будет полезно реализовать класс-оболочку, который предоставляет это общее свойство и содержит логику, которая определяет, какое значение присваивать свойству на основе объекта, который он переносит. (Ли это проще, чем StyleSelector, конечно, спорно.)

Если элементы действительно и действительно неоднородны, вы можете достичь результата с помощью шаблонов данных, например ::

<ListBox.Resources>
   <DataTemplate DataType="{x:Type local:Foo}">
      <TextBlock Text="{Binding FooText}" Background="Red"/>
   </DataTemplate>
   <DataTemplate DataType="{x:Type local:Bar}">
      <TextBlock Text="{Binding BarText}" Background="Yellow"/>
   </DataTemplate>
   <DataTemplate DataType="{x:Type local:Baz}">
      <TextBlock Text="{Binding BazText}" Background="PapayaWhip"/>
   </DataTemplate>
</ListBox.Resources>

и т.д.. Как правило, это будет мой первый выбор, но ваш вопрос на самом деле недостаточно объясняет обстоятельства, чтобы знать, правильный ли это путь или нет.

...