c# – 如何自定义TreeView在TreeView中显示的顺序/位置?

我有:4个层次级别的父子数据:1个系统,2个子系统,3个单元,4个组件

我的问题(见图片):TreeView显示一个Component,它与Comp2一样附加到根节点.

我的目标:在其对应的“列”(例如Comp3)中显示所有节点.

我尝试了所有缩进,间距,填充,但没有任何效果.

有任何想法吗?

最佳答案 您可以为节点使用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”并将其删除.

点赞