我在弄清楚如何模板化以下 TreeView 项目布局时遇到了一些困难:
我有几个项目,SearchList,其中包含一个 Search 集合,其中包含一个 DataSet 集合(有点,但这是题外话)。我遇到的困难是按照我想要的方式设计每个节点级别。我正在使用 MVVM,并且 TreeViews ItemsSource 属性设置为 SearchListViewModels 的 ObservableCollection,它又包含我的对象,一直沿对象树向下。
我可以成功设置 SearchList HierarchicalDataTemplate 的样式以正确显示它们。我挂断的地方是 SearchTerm 节点样式。我希望在 SearchTerm 内容区域右侧的包装面板或统一网格(我还没有决定)中表示数据集。我已经修改了一个 TreeViewItem 控件模板,使其具有我认为的这种行为方式),但是如果我在 Search HierarchicalDataTemplate 的 ItemContainerStyle 属性中设置它,它什么也不做。显示的只是搜索的内容。
我改变的 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>
当然,既可以采用不同的样式,又可以有不同的子项目布局?如何做到这一点?