WPF中TreeView添加子节点C#代码控制

在WPF中treeview一般用于显示文件夹目录。

如果只用xaml实现,那么就无法做到动态的改变,所以需要使用到C#代码控制。

而之前准备做一个类似vs的打开.sln就会加载项目目录这种结构的应用。遇到了一些问题。因为买来的教材上面并没有讲到TreeView,而百度到的很多都是SilverLight的版本,根本没办法参照。在一番搜索之后终于知道了用代码向TreeView中添加子节点。

在WPF中向TreeView添加节点的代码为:

            TreeViewItem mtrNode = new TreeViewItem();
            mtrNode.Header = "材料库"; 
            FileTree.Items.Add(mtrNode); 
我写的应用如下:

  • 首先自定义一个TreeView样式

        <TreeView Name="FileTree">
            <TreeView.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />

                <Style TargetType="TreeViewItem">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <Border Name="border" BorderThickness="2" BorderBrush="Transparent" Padding="2" CornerRadius="5">
                                    <TextBlock Text="{Binding}" Name="textBlock"/>
                                </Border>
                                <DataTemplate.Triggers>
                                    <DataTrigger Binding="{Binding IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="True">
                                        <Setter TargetName="border" Property="BorderBrush" Value="Navy"/>
                                        <Setter TargetName="textBlock" Property="Foreground" Value="Red"/>
                                    </DataTrigger>
                                </DataTemplate.Triggers>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TreeView.Resources>

            <TreeViewItem Header="Visual Studio" IsExpanded="True">
                <TreeViewItem Header="Visual Studio 2012"/>
                <TreeViewItem Header="Visual Studio 2010"/>
            </TreeViewItem>
            <TreeViewItem Header="SharpDevelop"/>
        </TreeView>

  • 在新建Page的时候传入参数,重写构造函数,此处的FileDir为文件夹目录
    public EditPage(string FileDir)
            {
                InitializeComponent();
                FileTree.Items.Clear();
                /*添加material文件夹目录*/
                var mtrFiles = Directory.GetFiles(FileDir + "/material", ".rfa");
                TreeViewItem mtrNode = new TreeViewItem();
                mtrNode.Header = "材料库"; 
    
                foreach(string fileName in mtrFiles)
                {
                    TreeViewItem item = new TreeViewItem();
                    item.Header = fileName.Substring((FileDir).Length + 10);
                    mtrNode.Items.Add(item);
                }
                FileTree.Items.Add(mtrNode); 
    
                /*添加rfa文件夹目录*/
                var rfaFiles = Directory.GetFiles(FileDir+"/rfa", "*.rfa");
                TreeViewItem rfaNode = new TreeViewItem();
                rfaNode.Header = "族库";
    
                foreach (string fileName in rfaFiles)
                {
                    TreeViewItem item = new TreeViewItem();
                    item.Header = fileName.Substring((FileDir).Length +5);
                    rfaNode.Items.Add(item);
                }
                FileTree.Items.Add(rfaNode);
            }
  • 运行效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章