C# 如何根据级别的不同设置TreeView项目的样式
我有一个C# 如何根据级别的不同设置TreeView项目的样式,c#,.net,wpf,xaml,treeview,C#,.net,Wpf,Xaml,Treeview,我有一个TreeView,这将是我已经为其创建样式的三个层次。当我将这三个级别与我的自定义样式硬编码在一起时,它会按预期工作。当我尝试绑定到TreeView时,级别没有正确呈现 硬编码树视图 <TreeView> <TreeViewItem Header="First Level" Style="{StaticResource TreeViewItemGroup}"> <TreeViewItem Header="Second Level (a
TreeView
,这将是我已经为其创建样式的三个层次。当我将这三个级别与我的自定义样式硬编码在一起时,它会按预期工作。当我尝试绑定到TreeView时,级别没有正确呈现
硬编码树视图
<TreeView>
<TreeViewItem Header="First Level" Style="{StaticResource TreeViewItemGroup}">
<TreeViewItem Header="Second Level (a)" Style="{StaticResource TreeViewItemSubGroup}">
<TreeViewItem Style="{StaticResource TreeViewItemItem}" />
<TreeViewItem Style="{StaticResource TreeViewItemItem}" />
<TreeViewItem Style="{StaticResource TreeViewItemItem}" />
</TreeViewItem>
<TreeViewItem Header="Second Level (b)" Style="{StaticResource TreeViewItemSubGroup}">
</TreeViewItem>
</TreeViewItem>
</TreeView>
带绑定的TreeView
<DataTemplate x:Key="MenuItemTemplate">
<TreeViewItem Style="{StaticResource TreeViewItemItem}" />
</DataTemplate>
<HierarchicalDataTemplate x:Key="MenuSubGroupTemplate"
ItemsSource="{Binding MenuItems}"
ItemTemplate="{StaticResource MenuItemTemplate}">
<TreeViewItem Header="{Binding Header}" Style="{StaticResource TreeViewItemSubGroup}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="MenuGroupTemplate"
ItemsSource="{Binding MenuSubGroups}"
ItemTemplate="{StaticResource MenuSubGroupTemplate}">
<TreeViewItem Header="{Binding Header}" Style="{StaticResource TreeViewItemGroup}" />
</HierarchicalDataTemplate>
<TreeView Grid.Row="1" ItemsSource="{Binding MenuGroups}" ItemTemplate="{StaticResource MenuGroupTemplate}"/>
我必须将每个样式放入
HierarchycalDataTemplate
的ItemContainerStyle
和TreeView
<DataTemplate x:Key="MenuItemTemplate">
<TreeViewItem Style="{StaticResource TreeViewItemItem}" />
</DataTemplate>
<HierarchicalDataTemplate x:Key="MenuSubGroupTemplate"
ItemsSource="{Binding MenuItems}"
ItemTemplate="{StaticResource MenuItemTemplate}">
<TextBlock Text={Binding Header} />
<HierarchicalDataTemplate.ItemContainerStyle>
<Style><!-- 3rd STYLE HERE --></Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="MenuGroupTemplate"
ItemsSource="{Binding MenuSubGroups}"
ItemTemplate="{StaticResource MenuSubGroupTemplate}">
<TextBlock Text={Binding Header} />
<HierarchicalDataTemplate.ItemContainerStyle>
<Style><!-- 2nd STYLE HERE --></Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
<TreeView ItemsSource="{Binding MenuGroups}" ItemTemplate="{StaticResource MenuGroupTemplate}">
<TreeView.ItemContainerStyle>
<Style><!-- 1st Level Style --></Style>
</TreeView.ItemContainerStyle>
</TreeView>
是的,这是最好的方法。
<DataTemplate x:Key="MenuItemTemplate">
<TreeViewItem Style="{StaticResource TreeViewItemItem}" />
</DataTemplate>
<HierarchicalDataTemplate x:Key="MenuSubGroupTemplate"
ItemsSource="{Binding MenuItems}"
ItemTemplate="{StaticResource MenuItemTemplate}">
<TextBlock Text={Binding Header} />
<HierarchicalDataTemplate.ItemContainerStyle>
<Style><!-- 3rd STYLE HERE --></Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="MenuGroupTemplate"
ItemsSource="{Binding MenuSubGroups}"
ItemTemplate="{StaticResource MenuSubGroupTemplate}">
<TextBlock Text={Binding Header} />
<HierarchicalDataTemplate.ItemContainerStyle>
<Style><!-- 2nd STYLE HERE --></Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
<TreeView ItemsSource="{Binding MenuGroups}" ItemTemplate="{StaticResource MenuGroupTemplate}">
<TreeView.ItemContainerStyle>
<Style><!-- 1st Level Style --></Style>
</TreeView.ItemContainerStyle>
</TreeView>