powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF TreeView - разные стили элементов?
4 сообщений из 4, страница 1 из 1
WPF TreeView - разные стили элементов?
    #36019414
Askeros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток!
Не подскажите как сделать у WPF TreeView у разных поддеревьев разные стили элементов?
...
Рейтинг: 0 / 0
WPF TreeView - разные стили элементов?
    #36020298
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Askeros,

если под разными поддеревьями подразумеваются разные классы, то у HierarchicalDataTemplate есть свойство DataType, позволяющее прикрутить уникальный шаблон к уникальному классу данных.

Классы данных:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
namespace Test
{
    public class ClassBase
    {
        public string Text { get; set; }
    }
    public class Class1 : ClassBase
    {
    }
    public class Class2 : ClassBase
    {
    }
}

Стандартное окно + контекст, состоящий из различных данных:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
using System.Windows;
using System.Collections.ObjectModel;

namespace Test
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            this.DataContext = new Collection<ClassBase>()
            {
                new Class1(),
                new Class2()
            };
        }
    }
}

стандартный XAML окна и набор шаюлонов, отражающий эти данные в TreeView разными цветами:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<Window x:Class="Test.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Test"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <HierarchicalDataTemplate 
            DataType="{x:Type local:Class1}">
            <TextBlock Background="Red" Text="{Binding}"/>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate 
            DataType="{x:Type local:Class2}">
            <TextBlock Background="Green" Text="{Binding}"/>
        </HierarchicalDataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView ItemsSource="{Binding}"/>
    </Grid>
</Window>
...
Рейтинг: 0 / 0
WPF TreeView - разные стили элементов?
    #36020539
Askeros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Роман.

Класс данных один, но возможно(не токмо от меня зависит) это удастся изменить.Попробуем.
...
Рейтинг: 0 / 0
WPF TreeView - разные стили элементов?
    #36020677
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Askeros,

если класс данных один, то можно использовать DataTemplateSelector.

источник данных:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
using System.Windows;
using System.Collections.ObjectModel;

namespace Test
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            this.DataContext = new Collection<ClassBase>()
            {
                new Class1(){Text="Red"},
                new Class1(){Text="Green"}
            };
        }
    }
}

DataTemplateSelector:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
using System.Windows.Controls;
using System.Windows;

namespace Test
{
    public class CustomTemplateSelector : DataTemplateSelector
    {
        public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
        {
            Class1 c = item as Class1;
            if (c == null) return null;

            Window window = Application.Current.MainWindow;

            if (c.Text == "Red")
                return window.FindResource("TemplateRed") as DataTemplate;
            if (c.Text == "Green")
                return window.FindResource("TemplateGreen") as DataTemplate;

            return base.SelectTemplate(item, container);
        }
    }
}

xaml:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<Window x:Class="Test.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Test"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <local:CustomTemplateSelector x:Key="CustomTemplateSelector"/>
        <HierarchicalDataTemplate 
            x:Key="TemplateRed"
            DataType="{x:Type local:Class1}">
            <TextBlock Background="Red" Text="{Binding}"/>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate
            x:Key="TemplateGreen"
            DataType="{x:Type local:Class1}">
            <TextBlock Background="Green" Text="{Binding}"/>
        </HierarchicalDataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView ItemsSource="{Binding}" 
             ItemTemplateSelector="{StaticResource CustomTemplateSelector}"/>
    </Grid>
</Window>
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF TreeView - разные стили элементов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]