Предполагая, что все объекты относятся к одному и тому же типу, я вижу два метода для достижения этого: использовать свойства ItemTemplate или ItemTemplateSelector.
Лично я предпочитаю подход XAML, который заключается в использовании свойства ItemTemplate.
В шаблоне вы бы указали триггеры для изменения внешнего вида в зависимости от уровня, на котором находится предмет. Чтобы получить этот уровень, вы можете указать конвертер, подобный следующему:
public class TreeViewItemToLevelConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is DependencyObject))
return 0;
return findLevel(value as DependencyObject, -1);
}
private int findLevel(DependencyObject tvi, int level)
{
DependencyObject tv = ItemsControl.ItemsControlFromItemContainer(tvi) as DependencyObject;
if (tv != null)
return findLevel(tv, level + 1);
else
return level;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new Exception("The method or operation is not implemented.");
}
}