TreeView使用总结
绑定:
<HierarchicalDataTemplate DataType="{x:Type src:LeafNode}"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Data}" ToolTip="{Binding Path=Data}"></TextBlock>
</HierarchicalDataTemplate>
</Grid.Resources>
<TreeView x:Name="twLeaf" TreeViewItem.Selected="twLeaf_Selected">
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Header="delete" Click="MenuItem_Click_1"></MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
</Grid>
CS代码:
public class LeafNode
{
private string data;
public string Data
{
get { return data; }
set { data = value; }
}
private List<LeafNode> children;
public List<LeafNode> Children
{
get { return children; }
set { children = value; }
}
}
绑定CS代码:
for (int i = 0; i < 5; i++)
{
LeafNode child = new LeafNode() { Data = "root" + i.ToString() };
child.Children = new List<LeafNode>();
roots.Add(child);
10 children
for (int j = 0; j < 10; j++)
{
LeafNode subChild = new LeafNode() { Data = "son" + j.ToString() };
subChild.Children = new List<LeafNode>();
15 children
child.Children.Add(subChild);
for (int k = 0; k < 15; k++)
{
LeafNode gs = new LeafNode() { Data = "grantSon" + k.ToString() };
subChild.Children.Add(gs);
}
}
}
twLeaf.ItemsSource = roots;
===============================================
点击叶子节点时,希望展开子节点:
<TreeView x:Name="twLeaf" TreeViewItem.Selected="twLeaf_Selected">
private void twLeaf_Selected(object sender, RoutedEventArgs e)
{
TreeViewItem item = e.OriginalSource as TreeViewItem;
item.IsExpanded = true;
}
=================================================
动态添加子节点
init 5 root nodes
List<LeafNode> roots = new List<LeafNode>();
private void InitTree()
{
for (int i = 0; i < 5; i++)
{
LeafNode child = new LeafNode() { Data = "root" + i.ToString() };
child.Children = new List<LeafNode>();
roots.Add(child);
10 children
for (int j = 0; j < 10; j++)
{
LeafNode subChild = new LeafNode() { Data = "son" + j.ToString() };
subChild.Children = new List<LeafNode>();
15 children
child.Children.Add(subChild);
for (int k = 0; k < 15; k++)
{
LeafNode gs = new LeafNode() { Data = "grantSon" + k.ToString() };
subChild.Children.Add(gs);
}
}
}
for (int i = 0; i < roots.Count; i++)
{
TreeViewItem item = new TreeViewItem();
AddLeaf(item, roots[i]);
twLeaf.Items.Add(item);
}
}
private void AddLeaf(TreeViewItem twItem, LeafNode node)
{
if (node == null)
{
return;
}
twItem.Header = node.Data;
if (node.Children != null && node.Children.Count > 0)
{
for (int i = 0; i < node.Children.Count; i++)
{
TreeViewItem it = new TreeViewItem();
AddLeaf(it, node.Children[i]);
twItem.Items.Add(it);
}
}
}
移除选中节点:
private void MenuItem_Click_1(object sender, RoutedEventArgs e)
{
TreeViewItem item = twLeaf.SelectedItem as TreeViewItem;
if (item != null)
{
TreeViewItem pi = item.Parent as TreeViewItem;
if (pi != null)
{
pi.Items.Remove(item);
}
else {
twLeaf.Items.Remove(item);
}
}
}
==================================================
遍历Treeview
List<LeafNode> nodeList = new List<LeafNode>();
private void btnGetNodes_Click(object sender, RoutedEventArgs e)
{
nodeList.Clear();
for (int i = 0; i < twLeaf.Items.Count; i++)
{
TreeViewItem rootItem = twLeaf.Items[i] as TreeViewItem;
if (null != rootItem)
{
GetTreeviewNodes(null, rootItem);
}
}
}
private void GetTreeviewNodes(LeafNode parentNode, TreeViewItem twItem)
{
LeafNode node = new LeafNode()
{
Data = twItem.Header.ToString(),
Children = new List<LeafNode>()
};
if (parentNode != null)
{
parentNode.Children.Add(node);
}
else
{
nodeList.Add(node);
}
if (twItem.Items.Count > 0)
{
for (int i = 0; i < twItem.Items.Count; i++)
{
TreeViewItem item = twItem.Items[i] as TreeViewItem;
if (null != item)
{
GetTreeviewNodes(node, item);
}
}
}
else
{
return;
}
}
绑定:
XAML
<Grid>
<HierarchicalDataTemplate DataType="{x:Type src:LeafNode}"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Data}" ToolTip="{Binding Path=Data}"></TextBlock>
</HierarchicalDataTemplate>
</Grid.Resources>
<TreeView x:Name="twLeaf" TreeViewItem.Selected="twLeaf_Selected">
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Header="delete" Click="MenuItem_Click_1"></MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
</Grid>
CS代码:
public class LeafNode
{
private string data;
public string Data
{
get { return data; }
set { data = value; }
}
private List<LeafNode> children;
public List<LeafNode> Children
{
get { return children; }
set { children = value; }
}
}
绑定CS代码:
for (int i = 0; i < 5; i++)
{
LeafNode child = new LeafNode() { Data = "root" + i.ToString() };
child.Children = new List<LeafNode>();
roots.Add(child);
10 children
for (int j = 0; j < 10; j++)
{
LeafNode subChild = new LeafNode() { Data = "son" + j.ToString() };
subChild.Children = new List<LeafNode>();
15 children
child.Children.Add(subChild);
for (int k = 0; k < 15; k++)
{
LeafNode gs = new LeafNode() { Data = "grantSon" + k.ToString() };
subChild.Children.Add(gs);
}
}
}
twLeaf.ItemsSource = roots;
===============================================
点击叶子节点时,希望展开子节点:
<TreeView x:Name="twLeaf" TreeViewItem.Selected="twLeaf_Selected">
private void twLeaf_Selected(object sender, RoutedEventArgs e)
{
TreeViewItem item = e.OriginalSource as TreeViewItem;
item.IsExpanded = true;
}
=================================================
动态添加子节点
init 5 root nodes
List<LeafNode> roots = new List<LeafNode>();
private void InitTree()
{
for (int i = 0; i < 5; i++)
{
LeafNode child = new LeafNode() { Data = "root" + i.ToString() };
child.Children = new List<LeafNode>();
roots.Add(child);
10 children
for (int j = 0; j < 10; j++)
{
LeafNode subChild = new LeafNode() { Data = "son" + j.ToString() };
subChild.Children = new List<LeafNode>();
15 children
child.Children.Add(subChild);
for (int k = 0; k < 15; k++)
{
LeafNode gs = new LeafNode() { Data = "grantSon" + k.ToString() };
subChild.Children.Add(gs);
}
}
}
for (int i = 0; i < roots.Count; i++)
{
TreeViewItem item = new TreeViewItem();
AddLeaf(item, roots[i]);
twLeaf.Items.Add(item);
}
}
private void AddLeaf(TreeViewItem twItem, LeafNode node)
{
if (node == null)
{
return;
}
twItem.Header = node.Data;
if (node.Children != null && node.Children.Count > 0)
{
for (int i = 0; i < node.Children.Count; i++)
{
TreeViewItem it = new TreeViewItem();
AddLeaf(it, node.Children[i]);
twItem.Items.Add(it);
}
}
}
移除选中节点:
private void MenuItem_Click_1(object sender, RoutedEventArgs e)
{
TreeViewItem item = twLeaf.SelectedItem as TreeViewItem;
if (item != null)
{
TreeViewItem pi = item.Parent as TreeViewItem;
if (pi != null)
{
pi.Items.Remove(item);
}
else {
twLeaf.Items.Remove(item);
}
}
}
==================================================
遍历Treeview
List<LeafNode> nodeList = new List<LeafNode>();
private void btnGetNodes_Click(object sender, RoutedEventArgs e)
{
nodeList.Clear();
for (int i = 0; i < twLeaf.Items.Count; i++)
{
TreeViewItem rootItem = twLeaf.Items[i] as TreeViewItem;
if (null != rootItem)
{
GetTreeviewNodes(null, rootItem);
}
}
}
private void GetTreeviewNodes(LeafNode parentNode, TreeViewItem twItem)
{
LeafNode node = new LeafNode()
{
Data = twItem.Header.ToString(),
Children = new List<LeafNode>()
};
if (parentNode != null)
{
parentNode.Children.Add(node);
}
else
{
nodeList.Add(node);
}
if (twItem.Items.Count > 0)
{
for (int i = 0; i < twItem.Items.Count; i++)
{
TreeViewItem item = twItem.Items[i] as TreeViewItem;
if (null != item)
{
GetTreeviewNodes(node, item);
}
}
}
else
{
return;
}
}