Есть много способов сделать это.
Один из них - использовать 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>
и т.д.. Как правило, это будет мой первый выбор, но ваш вопрос на самом деле недостаточно объясняет обстоятельства, чтобы знать, правильный ли это путь или нет.