gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:30:35 28 4
gpt4 key购买 nike

我有:具有 4 个层级的父子数据:1 个系统、2 个子系统、3 个单元、4 个组件
我的问题(见图):TreeView 显示一个组件,它像 Comp2 一样附加到根节点。我的目标:在对应的“列”(例如 Comp3)中显示所有节点。
我尝试了所有缩进、间距、填充,但没有任何效果。
enter image description here

有什么想法吗?

最佳答案

您可以为节点使用一个项目模板,给它们一个宽度,它们将准确地显示在您想要的位置。

这段代码是针对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”并将其删除。

关于c# - 如何自定义 TreeNode 在 TreeView 中的显示顺序/位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861374/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com