У меня есть несколько цветов для объектов Layer
, которые показаны в TreeView
. Сейчас я использую что-то вроде этого:
<GridViewColumn Width="300">
<GridViewColumnHeader Content="Layers" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel MouseLeftButtonDown="Layers_MouseLeftButtonDown" Orientation="Horizontal">
<Image Width="15"
Height="15"
Source="{Binding ImageFromColor}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
Исходные значения цвета будут доступны (привязаны) из самого Layer
, так что:
layer.Color
типа System.Drawing.Color
. Но я могу изменить тип, чтобы быть чем-то другим, если бы это облегчило ситуацию.
Какой лучший способ сделать это с точки зрения производительности и элегантности?
У меня будет несколько тысяч TreeView
элементов, которые имеют значение.
Я не пробовал сам с TreeView (только с ListBox), но, возможно, стоит попробовать:
<DataTemplate>
<!-- your additional container -->
<Canvas Width="15" Height="15">
<Canvas.Background>
<SolidColorBrush Color="{Binding Path=ColorProperty}" />
</Canvas.Background>
</Canvas>
<!-- end of container -->
</DataTemplate>
Этот подход использует прямую привязку к свойству цвета, поэтому изображения не нужно создавать (например, конвертером).
Но определенно рекомендуется попробовать его, чтобы увидеть, работает ли он с тысячами элементов.