一、最简单的用法,使用TreeViewItem展开,如下:
效果:
二、获取xml文件中的数据进行展示,如下:
xml文件XMLFile1.xml代码:
窗体xaml代码:
运行效果:
三、使用数据绑定来来展示节点,这里在一个程序中,用三个函数举了三个例子,如下:
首先新建一个PropertyNodeItem类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WPFTreeview
{
class PropertyNodeItem
{
public string Icon { get; set; }
public string EditIcon { get; set; }
public string DisplayName { get; set; }
public string Name { get; set; }
public List Children { get; set; }
public PropertyNodeItem()
{
Children = new List();
}
}
}
主窗体xaml代码:
主窗体后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
namespace WPFTreeview
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//三个函数
ShowTreeView1();
//ShowTreeView2();
//ShowTreeView3();
}
private const string FOLDER_ICON = @"";//Icon路径
private const string EDITABLE_ICON = @"";//Icon路径
private const string TAG_ICON = @"";//Icon路径
private void ShowTreeView1()
{
List itemList = new List();
PropertyNodeItem node1 = new PropertyNodeItem()
{
DisplayName = "蔬菜",
Name = "蔬菜可提供人体所必需的多种维生素和矿物质等营养物质!",
Icon = FOLDER_ICON,
};
PropertyNodeItem node1tag1 = new PropertyNodeItem()
{
DisplayName = "青菜",
Name = "青菜是十字花科,芸苔属一年或二年生草本植物!",
Icon = TAG_ICON,
EditIcon = EDITABLE_ICON
};
node1.Children.Add(node1tag1);
PropertyNodeItem node1tag2 = new PropertyNodeItem()
{
DisplayName = "白菜",
Name = "白菜是我国原产蔬菜,有悠久的栽培历史!",
Icon = TAG_ICON,
EditIcon = EDITABLE_ICON
};
node1.Children.Add(node1tag2);
itemList.Add(node1);
PropertyNodeItem node2 = new PropertyNodeItem()
{
DisplayName = "动物",
Name = "动物是生物的一个种类。它们一般以有机物为食,能感觉,可运动,能够自主运动!",
Icon = FOLDER_ICON,
};
PropertyNodeItem node2tag1 = new PropertyNodeItem()
{
DisplayName = "老虎",
Name = "老虎是大型猫科动物;毛色浅黄或棕黄色,满身黑色横纹!",
Icon = TAG_ICON,
EditIcon = EDITABLE_ICON
};
node2.Children.Add(node2tag1);
PropertyNodeItem node2tag2 = new PropertyNodeItem()
{
DisplayName = "大象",
Name = "大象很早就成了人类的朋友,并能为人类提供帮助!",
Icon = TAG_ICON,
EditIcon = EDITABLE_ICON
};
node2.Children.Add(node2tag2);
itemList.Add(node2);
treeView.ItemsSource = itemList;
}
private void ShowTreeView2()
{
List itemList = new List();
PropertyNodeItem leafOneNode = new PropertyNodeItem();
leafOneNode.DisplayName = "小员工A";
leafOneNode.Name = "这是小员工A";
leafOneNode.Children = new List();
PropertyNodeItem leafTwoNode = new PropertyNodeItem();
leafTwoNode.DisplayName = "小员工B";
leafTwoNode.Name = "这是小员工B";
leafTwoNode.Children = new List();
PropertyNodeItem leafThreeNode = new PropertyNodeItem();
leafThreeNode.DisplayName = "小员工C";
leafThreeNode.Name = "这是小员工C";
leafThreeNode.Children = new List();
PropertyNodeItem secondLevelNode = new PropertyNodeItem();
secondLevelNode.DisplayName = "总经理";
secondLevelNode.Name = "这是二级领导";
secondLevelNode.Children = new List() { leafOneNode, leafTwoNode, leafThreeNode };
PropertyNodeItem firstLevelNode = new PropertyNodeItem();
firstLevelNode.DisplayName = "董事长";
firstLevelNode.Name = "这是一级领导";
firstLevelNode.Children = new List() { secondLevelNode };
itemList.Add(firstLevelNode);
treeView.ItemsSource = itemList;
}
private void ShowTreeView3()
{
List itemList = new List();
XmlDocument doc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(@"XMLProducts.xml", settings);
doc.Load(reader);
XmlNode xn = doc.SelectSingleNode("Products");
XmlNodeList xnl1 = xn.ChildNodes;
foreach (XmlNode xn1 in xnl1)
{
//一级节点
PropertyNodeItem firstLevelNode = new PropertyNodeItem();
XmlElement xe1 = (XmlElement)xn1;
firstLevelNode.Name = "我是一级节点";
firstLevelNode.DisplayName = xe1.GetAttribute("Name").ToString();
XmlNodeList xnl2 = xe1.ChildNodes;
foreach (XmlNode xn2 in xnl2)
{
XmlElement xe2 = (XmlElement)xn2;
XmlNodeList xnl3 = xe2.ChildNodes;
PropertyNodeItem secondLevelNode = new PropertyNodeItem();
secondLevelNode.Name = "我是二级节点";
secondLevelNode.DisplayName = xe2.GetAttribute("Name").ToString();
foreach (XmlNode xn3 in xnl3)
{
XmlElement xe3 = (XmlElement)xn3;
PropertyNodeItem leafOneNode = new PropertyNodeItem();
leafOneNode.DisplayName = xe3.GetAttribute("Name").ToString();
leafOneNode.Children = new List();
secondLevelNode.Children.Add(leafOneNode);
}
firstLevelNode.Children.Add(secondLevelNode);
}
itemList.Add(firstLevelNode);
}
reader.Close();
treeView.ItemsSource = itemList;
}
}
}
三个例子运行效果分别是:
其中第三个例子是从XML文件中读取的数据,XMLProducts.xml文件代码如下:
XML文件属性如下:



