【问题标题】:Tree View Parent-Child Full Hierarchy树视图父子完整层次结构
【发布时间】:2013-12-22 19:34:12
【问题描述】:

我为文件夹导航系统创建了以下树视图:

看起来像:

我的代码:

string[] RootFolders = Directory.GetDirectories(txtRootDirectory.Text.Trim());

        foreach (string dir0 in RootFolders)
        {
            if (dir0.Contains("_In"))
            {
                TreeViewItem path = new TreeViewItem() { Header = new DirectoryInfo(dir0).Name };

                string[] MainFolder = Directory.GetDirectories(dir0);
                foreach(string dir1 in MainFolder)
                {
                    TreeViewItem path1 = new TreeViewItem() { Header = new DirectoryInfo(dir1).Name };
                    path.Items.Add(path1);

                    string[] SubFolder = Directory.GetDirectories(dir1);
                    foreach (string dir2 in SubFolder)
                    {
                        TreeViewItem path2 = new TreeViewItem() { Header = new DirectoryInfo(dir2).Name };
                        path1.Items.Add(path2);
                    }
                }



                tree.Items.Add(path);
            }
        }

我需要的是能够获得序列中最后一个子节点的所有父文件夹的名称,并将它们连接在一起形成一个目录。例如,如果选择了“ascx Staging Application”树项,我需要返回“ascx Staging Application”、“Web 应用程序”、“_In Development”,以便创建一个用于打开此文件的字符串。 (即“c:_In Development\Web Applications\ascx Staging Application.sln”)

到目前为止我所能想到的就是这个,从这里开始一切似乎都崩溃了......

private void tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        TreeViewItem trvItem = (TreeViewItem)tree.SelectedItem;

        if (trvItem != null)
        {
            TreeViewItem trvParent = (TreeViewItem)trvItem.Parent;
            MessageBox.Show(trvParent.Header.ToString());
        }
    }

【问题讨论】:

    标签: c# wpf treeview


    【解决方案1】:

    一个非常简单的解决方案是将路径分配给每个 TreeViewElement 的 Tag 属性。

    读取选定路径的代码如下所示:

    private void tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            TreeViewItem trvItem = (TreeViewItem)tree.SelectedItem;
    
            if (trvItem != null)
            {
                String path = (String)trvItem.Tag;
                MessageBox.Show(path);
            }
        }
    

    【讨论】:

    • 更好更简单的方法是使用 DataBindings。如果你需要一个例子,我明天可以发一个。
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多