Я не могу сказать вам, как исправить этот код для этого. Что я могу сделать, так это сказать вам, что вам не нужен кодовый код для этого. Это похоже на кошмар.
Вот простой пример того, как использовать привязку, стиль и триггер для выполнения того, о чем вы говорите. Не слишком волнуйтесь из-за того, что я здесь использую XmlDataProvider
- это просто рабочий пример, который вы можете вставить в Kaxaml и поиграть с ним. Когда я говорю «просто», я имею в виду, что все это достигается за счет единого связывания, единого шаблона и единого стиля.
Ключевым моментом здесь является то, что стиль в HierarchicalDataTemplate
устанавливает FontWeight
на Bold
по умолчанию, а затем DataTrigger
устанавливает его на Normal
, если элемент не имеет дочерних элементов. (Поэтому, когда вы раскроете дерево, вы заметите, что тот факт, что элемент выделен жирным шрифтом, говорит о том, что у него есть дети. Это выглядит довольно мило.)
Если вы привязываетесь к чему-то другому, чем XmlDataSource
, у вас, вероятно, есть свойство в источнике, которое DataTrigger
может проверить, со значением, которое говорит вам, является ли он дочерним или нет; просто вставьте это свойство и значение в стиль.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<XmlDataProvider x:Key="Data">
<x:XData>
<Data xmlns="">
<Parent Text="This is a parent">
<Child Text="This is a child"/>
<Child Text="This is a child">
<Grandchild Text="This is a grandchild"/>
<Grandchild Text="This is a grandchild"/>
</Child>
<Child Text="This is a child"/>
</Parent>
<Parent Text="This is a parent">
<Child Text="This is a child"/>
<Child Text="This is a child"/>
<Child Text="This is a child"/>
</Parent>
</Data>
</x:XData>
</XmlDataProvider>
</Page.Resources>
<DockPanel>
<TreeView DockPanel.Dock="Top" ItemsSource="{Binding Source={StaticResource Data}, XPath=/Data/*}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding XPath=*}">
<TextBlock Text="{Binding XPath=@Text}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="Bold"/>
<Style.Triggers>
<DataTrigger Binding="{Binding XPath=*}" Value="{x:Null}">
<Setter Property="FontWeight" Value="Normal"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</DockPanel>
</Page>