В этом примере в зависимости от object value - название пункта дерева (типа string) определяется картинка в дереве.
#region HeaderToImageConverter
[ValueConversion(typeof(string), typeof(bool))]
public class HeaderToImageConverter : IValueConverter
{
public static HeaderToImageConverter Instance = new HeaderToImageConverter();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((value as string).Contains(@"\"))
{
Uri uri = new Uri("pack://application:,,,/Images/diskdrive.png");
BitmapImage source = new BitmapImage(uri);
return source;
}
else
{
Uri uri = new Uri("pack://application:,,,/Images/tree1.png");
BitmapImage source = new BitmapImage(uri);
return source;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException("Cannot convert back");
}
}
#endregion // DoubleToIntegerConverter
xaml:
<TreeView x:Name="tw_tree" TreeViewItem.Expanded="TreeViewItem_Expanded" Width="150" TreeViewItem.Selected="TreeViewItem_SelectedItem" Background="#FF222222" BorderBrush="#FFFFFFFF" Foreground="#FFFFFFFF" >
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Name="img" Width="20" Height="20" Stretch="Fill"
Source="{Binding
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type TreeViewItem}},
Path=Header,
Converter={x:Static local:HeaderToImageConverter.Instance}}"
/>
<TextBlock Text="{Binding}" Margin="5,0" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TreeView.Resources>
</TreeView>
Но мне нужно чтобы картинка определялась уровнем level моего класса Category.
public class Category
{
public string name_ { get; set; }
public int level { get; set; }
public ObservableCollection<Category> collection_category { get; set; }
public Category()
{
collection_category = new ObservableCollection<Category>();
}
}
так добавляется объекты категории в дерево
tw_tree.Items.Add(CreateTreeItem(i));
i.level = expandedDir.level + 1;
item.Items.Add(CreateTreeItem(i));
private TreeViewItem CreateTreeItem(object o)
{
TreeViewItem item = new TreeViewItem();
item.Header = ((Category)o).name_.ToString();
item.Tag = o;
item.Items.Add("Loading...");
return item;
}
Мне нужно в HeaderToImageConverter заменить object value if ((value as string)
на level.
Как это сделать?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется приложение WPF, из которого нужно запустить другое небольшое приложение WPF в виде исполнимого файла (exe) с параметрами, передаваемыми...
Приложение запускает Service по нажатию на кнопку, в котором начинает тикать таймер
Хочу сделать кубик, который я бужу двигать по Canvas'у мышкой и после каждого переноса бордера в текст боксе выводило бы его конечные координаты...
У меня есть две формы(Form1, Form2)Form1 появляется сразу после запуска программы, является основной и запускается через Application