Я пытаюсь кастомизировать элемент TreeView с помощью шаблонов. В дереве будет 2 уровня узлов (родитель и дочерний). Для каждого из них есть по шаблону:
<ControlTemplate TargetType="TreeViewItem" x:Key="ParentNodeTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{TemplateBinding Header}" Margin="5,5,5,5"/>
<Button Content="Обновить" Margin="5,5,5,5"/>
</StackPanel>
</ControlTemplate>
для родителя и
<ControlTemplate TargetType="TreeViewItem" x:Key="ChildNodeTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{TemplateBinding Header}"/>
</StackPanel>
</ControlTemplate>
для дочерних элементов. Шаблоны совсем простенькие исключительно для проверки работоспособности подхода. Само дерево в разметке выглядит просто:
<TreeView x:Name="tree"/>
Заполнение дерева происходит в коде таким образом:
foreach(var project in Service.MonitoredProjects)
{
TreeViewItem parentItem = new TreeViewItem()
{
Header=project.Name,
Template = (ControlTemplate)this.FindResource("ParentNodeTemplate"),
};
foreach (var mainfile in project.MainFileList)
{
TreeViewItem childItem = new TreeViewItem()
{
Header=mainfile.Name,
Template = (ControlTemplate)this.FindResource("ChildNodeTemplate")
};
(parentItem.Items[0] as TreeViewItem).Items.Add(childItem);
}
tree.Items.Add(parentItem);
}
После всех этих манипуляций я получаю на выходе родительские элементы без возможности развернуть их. Хотя пошаговая проверка показала, что узлы-родители содержат в себе дочерние узлы. И вопрос мой в том, что я делаю не так и почему я не могу развернуть узлы?
Итак, с помощью @Андрей NOP я решил свою проблему. По итогу получилось следующее: Шаблон родителя:
<HierarchicalDataTemplate DataType="{x:Type local:MonitoredProject}" ItemsSource="{Binding MainFileList}">
<StackPanel Orientation="Horizontal">
<Image MaxHeight="30" MaxWidth="30" Source="Images\folder_closed.png" ContextMenu="{StaticResource parentNodeMenu}"/>
<Label Content="{Binding Name}" Margin="5,5,5,5" Foreground="{Binding Match, Converter={local:Converter}}" VerticalContentAlignment="Center" FontSize="16" ContextMenu="{StaticResource parentNodeMenu}"/>
<Button Content="Править" Margin="5,5,5,5" Click="EditProject_Clck" Tag="{Binding Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
Шаблон дочернего элемента:
<DataTemplate DataType="{x:Type local:MonitoredFile}">
<StackPanel Orientation="Horizontal">
<Image MaxHeight="35" MaxWidth="35" Source="{Binding SourceAdress, Converter={local:ImageConverter}}" ContextMenu="{StaticResource childNodeMenu}"/>
<Label Content="{Binding Name}" Margin="5,5,5,5" Foreground="{Binding Match, Converter={local:Converter}}" VerticalContentAlignment="Center" FontSize="14" ContextMenu="{StaticResource childNodeMenu}"/>
</StackPanel>
</DataTemplate>
Сам контрол:
<TreeView x:Name="tree" ItemsSource="{Binding Path=(local:Service.MonitoredProjects)}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="Expanded" Handler="TreeViewItem_Expanded"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Спасибо неравнодушному товарищу за помощь!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Использую в проекте SQLite (устанавливал через NuGet) и DapperВ проекте используется пул потоков для чтения из БД, запись в БД производится из отдельного...