c# - treeview檔案總管 - winform treeview



我如何自定義TreeView中TreeNodes的顯示順序/位置? (1)

您可以使用項目模板的節點,給他們一個寬度,他們將顯示在你想要的地方。

此代碼是為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”並將其刪除。

我有:具有4個層級的父子數據:1個系統,2個子系統,3個單元,4個組件
我的問題(見圖):TreeView顯示一個Component,它像Comp2一樣附加到根節點。 我的目標是:顯示其對應“列”中的所有節點(例如Comp3)。
我試過所有的縮進,間距,填充,但沒有任何工作。

有任何想法嗎?





position