Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
1
.NET 4.x

Шаблон для TreeView. Не получается сделать как задумал. Проект, код, скриншот внутри.

30.05.2011, 23:55. Показов 1698. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу сделать шаблон для TreeView. Я прикрепил 2 изображения. Там видно белые прямоугольники, вот если у меня развернуть например "Вложение 2", то там появится возможность развернуть "вложение 2.1", но там уже не белый прямоугольник, а стандартный. На скриншоте это хорошо видно. Такой список будет строиться динамически, так что мне нужно как-то всё это дело в шаблоне прописать.

Вроде сделал стиль для свойства TreeView'a - ItemContainerStyle="{DynamicResource TreeViewItemStyle}", но почему-то к дочерним вложениям корневых вложений этот новый стиль прямоугольников не применяется.

Я прикрепил проект, может кто нибудь захочет помочь, с проектом это будет сделать в разы проще, так как там всё есть и всё работает. Я просто что-то не врублюсь, что менять то надо... Вообще всё это я редактировал в Expression Blend 4.

ResourceDictionary с стилями и шаблонами для TreeView
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 
    <PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 z"/>
    <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
        <Setter Property="Focusable" Value="False"/>
        <Setter Property="Width" Value="16"/>
        <Setter Property="Height" Value="16"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Border Background="Transparent" Height="16" Padding="5,5,5,5" Width="16">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver"/>
                                <VisualState x:Name="Pressed"/>
                                <VisualState x:Name="Disabled"/>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="CheckStates">
                                <VisualState x:Name="Checked"/>
                                <VisualState x:Name="Unchecked"/>
                                <VisualState x:Name="Indeterminate"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Path x:Name="ExpandPath" Data="{StaticResource TreeArrow}" Fill="White" Stroke="White" Margin="0,0,-0.913,-0.972" Stretch="Fill">
                            <Path.RenderTransform>
                                <RotateTransform Angle="135" CenterY="3" CenterX="3"/>
                            </Path.RenderTransform>
                        </Path>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF1BBBFA"/>
                            <Setter Property="Fill" TargetName="ExpandPath" Value="White"/>
                        </Trigger>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="RenderTransform" TargetName="ExpandPath">
                                <Setter.Value>
                                    <RotateTransform Angle="180" CenterY="3" CenterX="3"/>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Fill" TargetName="ExpandPath" Value="White"/>
                            <Setter Property="Stroke" TargetName="ExpandPath" Value="#FFFF9557"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
 
    <SolidColorBrush x:Key="ListBorder" Color="#828790"/>
    <Style x:Key="TreeViewGenres_Style" TargetType="{x:Type TreeView}">
        <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
        <Setter Property="BorderBrush" Value="{StaticResource ListBorder}"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
        <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TreeView}">
                    <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
                        <ScrollViewer x:Name="_tv_scrollviewer_" CanContentScroll="false" Focusable="false" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
                            <ScrollViewer.Background>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="#24FFFFFF" Offset="0"/>
                                    <GradientStop Color="#21000000" Offset="1"/>
                                </LinearGradientBrush>
                            </ScrollViewer.Background>
                            <ItemsPresenter/>
                        </ScrollViewer>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                        </Trigger>
                        <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
                            <Setter Property="CanContentScroll" TargetName="_tv_scrollviewer_" Value="true"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
                <Setter Property="ItemsPanel">
                    <Setter.Value>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel/>
                        </ItemsPanelTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style x:Key="TreeViewItemFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
 
    <Style x:Key="TreeViewItemStyle" TargetType="{x:Type TreeViewItem}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
        <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
        <Setter Property="Padding" Value="1,0,0,0"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TreeViewItem}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition MinWidth="19" Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver"/>
                                <VisualState x:Name="Disabled"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
                        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                            <ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                        <ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsExpanded" Value="false">
                            <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
                        </Trigger>
                        <Trigger Property="HasItems" Value="false">
                            <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="true"/>
                                <Condition Property="IsSelectionActive" Value="false"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                        </MultiTrigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
                <Setter Property="ItemsPanel">
                    <Setter.Value>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel/>
                        </ItemsPanelTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

XAML код главного окна
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<Window x:Class="Wpf_TreeViewTemplate.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="292" WindowStartupLocation="CenterScreen" TextOptions.TextFormattingMode="Display">
    <Window.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FF7CA4B4" Offset="0" />
            <GradientStop Color="#FF739AB7" Offset="1" />
        </LinearGradientBrush>
    </Window.Background>
    <Grid>
        <TreeView Margin="7,12,12,12" x:Name="treeView" Style="{DynamicResource TreeViewGenres_Style}" ItemContainerStyle="{DynamicResource TreeViewItemStyle}" >
            <TreeViewItem Header="Вложение 1" Foreground="Cornsilk">
                <TreeViewItem Header="0000000" />
                <TreeViewItem Header="0000000" />
                <TreeViewItem Header="0000000" />
            </TreeViewItem>
            <TreeViewItem Header="Вложение 2" Foreground="Cornsilk">
                <TreeViewItem Header="0000000"/>
                <TreeViewItem Header="0000000"/>
                <TreeViewItem Header="Вложение 2.1" Foreground="Cornsilk">
                    <TreeViewItem Header="0000000"/>
                    <TreeViewItem Header="0000000"/>
                    <TreeViewItem Header="0000000"/>
                    <TreeViewItem Header="0000000"/>
                    <TreeViewItem Header="Вложение 2.2" Foreground="Cornsilk">
                        <TreeViewItem Header="0000000"/>
                        <TreeViewItem Header="0000000"/>
                        <TreeViewItem Header="0000000"/>
                        <TreeViewItem Header="0000000"/>
                    </TreeViewItem>
                </TreeViewItem>
                <TreeViewItem Header="0000000"/>
                <TreeViewItem Header="0000000"/>
            </TreeViewItem>
        </TreeView>
    </Grid>
</Window>
Миниатюры
Шаблон для TreeView. Не получается сделать как задумал. Проект, код, скриншот внутри.   Шаблон для TreeView. Не получается сделать как задумал. Проект, код, скриншот внутри.  
Вложения
Тип файла: rar Wpf_TreeViewTemplate.rar (28.6 Кб, 33 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2011, 23:55
Ответы с готовыми решениями:

Как сделать скриншот экрана в приложении для Android
Добрый день! Подскажите, пожалуйста, как можно в приложении для Android сделать скриншот всего,...

Есть код для Билдера, нужно сделать из него проект
Всем привет, есть код с билдера, помогите, кто может сделать из этого проект, пытаюсь, но то к...

Как задать шаблон вывода для кастомного типа постов внутри плагина?
Как задать шаблон вывода для кастомного типа постов внутри плагина? Например есть плагин, где...

Можно ли как-то тёмный скриншот сделать светлым? (Для распечатки надо)
Привет. Написал я, к примеру, небольшую инструкцию. Вставил туда скриншоты. Но в самих программах...

2
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.06.2011, 21:01  [ТС] 2
Народ, подскажите что нибудь... Хотя бы примерно в чём проблема может быть?
0
101 / 86 / 6
Регистрация: 08.04.2010
Сообщений: 169
05.06.2011, 11:06 3
That's because the ItemContainerStyle is not inherited by the child nodes. You need to add the same EventSetter on the ItemContainerStyle o your HierarchicalDataTemplate.

Взял отсюда http://stackoverflow.com/quest... ight-click
1
05.06.2011, 11:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2011, 11:06
Помогаю со студенческими работами здесь

Задумал я сделать игрушку
В этой записи я буду писать много всякого бреда, отрывочных мыслей и бессвязных кусков кода. Это...

Как сделать код внутри команды echo интерпретируемым?
Здравсвуйте, пишу код для формы в которой нужно указать в какую запись из таблицы tovars нужно...

GDI+. Бегущая строка. Как сделать? Код внутри
Как сделать бегущую строку? { Bitmap bm = new Bitmap(300, 300); Graphics g =...

Не получается динамически создать меню, код внутри
Добрый день! Такая проблема возникла. У меня есть toolStripLabel. При нажатии правой кнопки...

Подскажите, как делаются подобного рода переходы в css? (внутри скриншот)
мне интересно, как делаются такие очертания менюшек или любого другого блока. на скриншотах указал...

Задумал сделать свой редактор печатных плат. Ваши пожелания?
Существующие редакторы печатных плат и принципиальных схем, которые я трогал, кажутся какими-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru