我有:4个层级的父子数据:1个系统,2个子系统,3个单元,4个组件
我的问题(见图片):TreeView显示一个Component,它与Comp2一样附加到根节点。
我的目标:在对应的“列”中显示所有节点(例如Comp3)
我尝试了所有缩进,间距,填充,但没有任何效果
有什么想法吗?
答案 0 :(得分:2)
您可以为节点使用itemtemplate,为它们指定宽度,它们将准确显示在您想要的位置。
此代码适用于WPF,但我认为应该没有太大区别:
首先,为NodeViewModel提供一个ItemTemplate,包括一个HierachicalDataTemplate
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:NodeViewModel}" ItemsSource="{Binding Children}">
<ContentPresenter x:Name="item" ContentTemplate="{StaticResource notSelectedItemTemplate}" />
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter TargetName="item" Property="ContentTemplate" Value="{StaticResource selectedItemTemplate}" />
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
其次,为您的节点提供DataTemplate:
<DataTemplate x:Key="selectedItemTemplate" DataType="{x:Type local:NodeViewModel}">
<Grid Height="Auto" TextElement.Foreground="Black">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="100"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Id}" HorizontalAlignment="Left"></TextBlock>
<TextBlock Grid.Column="1" Text="----" HorizontalAlignment="Left"></TextBlock>
<TextBlock Grid.Column="2" Text="{Binding Name}" HorizontalAlignment="Left"></TextBlock>
</Grid>
</DataTemplate>
如您所见,我有两个DataTemplates,因为我对选定的节点有不同的一个。对于您不必要的情况,请忽略“notSelectedItemTemplate”并将其删除。