我在WPF应用程序中有一个treeview控件,它有3个级别 - Root,Child和Leaf。 类似的东西:
<DataTemplate DataType="{x:Type local:Leaf}">
<Grid>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="True" Content="LeafCheckbox" />
<TextBlock Text="{Binding Path=SomeValue}"/>
</StackPanel>
</Grid>
</DataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Child}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Child " />
<TextBlock Text="{Binding Path=SomeValue}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Root}" ItemsSource="{Binding Children}">
<Grid>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Root " />
<TextBlock Text="{Binding Path=SomeValue}" />
</StackPanel>
</Grid>
</HierarchicalDataTemplate>
我的设计要求有一个自定义标题,可以取消选中所有内容,如下所示:
在与此斗争之后,我尝试使用唯一名称向有界列表的第一个索引添加一个叶子,并在XAML中以不同方式处理它和皮肤。这样的工作,但它搞砸了列表,它只是变得太毛茸茸无法处理 - 一个丑陋的黑客的定义。 我还考虑过更改实际的HierarchicalDataTemplate,让它使用2行网格,最下面一行是特殊标题 - 虽然有效,但问题是扩展器总是垂直居中而不与“Root”对齐。 / p>
任何想法如何很好地做到这一点?