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