我正在尝试对以下TreeView项布局进行模板化,但遇到了一些困难:
我有几个项目,SearchList,其中包含一个Search集合,该集合包含一个DataSet集合(有点类似,但这不是重点)。 我遇到的问题是如何按照自己的想法为每个节点级别设置样式。我正在使用MVVM,TreeViews ItemsSource属性设置为SearchListViewModels的ObservableCollection,而SearchListViewModels又包含整个对象树。
我可以成功地将SearchList HierarchicalDataTemplate样式化以正确显示它们。 我卡在了SearchTerm节点的样式上。我希望DataSets在SearchTerm内容区域的右侧以WrapPanel或UniformGrid的形式呈现出来(我还没有决定),我已修改了TreeViewItem控件模板以实现此目的(我认为),但是如果我将其设置在Search HierarchicalDataTemplate的ItemContainerStyle属性中,则什么也不会发生。 显示的只是Search的内容。
我修改后的TreeViewItem模板
<Style TargetType="{x:Type TreeViewItem}" x:Key="AlteredTreeViewItem">
<Setter Property="HorizontalContentAlignment"
Value="Stretch" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"
MinWidth="19" />
<ColumnDefinition Width="0.414*" />
<ColumnDefinition Width="0.586*"/>
</Grid.ColumnDefinitions>
<Border x:Name="Bd" HorizontalAlignment="Stretch"
Grid.Column="1" Grid.ColumnSpan="1" Background="#7F058956">
<ContentPresenter x:Name="PART_Header" Margin="10,0" />
</Border>
<WrapPanel x:Name="ItemsHost"
Grid.Column="2" IsItemsHost="True"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我的搜索分层数据模板
<HierarchicalDataTemplate DataType="{x:Type local:SearchViewModel}" ItemsSource="{Binding MySearch.Custodians}" ItemContainerStyle="{StaticResource AlteredTreeViewItem}">
<TextBlock Text="{Binding MySearch.SearchName}" Foreground="Black" FontFamily="Arial" FontSize="16"/>
</HierarchicalDataTemplate>
当然可以同时以不同的样式呈现,同时也可以以不同的方式布局子项。如何实现这一点呢?
UserControl
作为<ControlTemplate .../>
元素的内容。 - IAbstract