我在* winform applica *上有一个 treeview 控件。在这里,我想做的是: 折叠其关卡中的所有其他节点,仅花费选定的节点。 例如,假设场景: - 所有主题 +计算机科学 +数学
根节点是“所有主题”,两个子节点 1)计算机科学和 2)数学。 这些两个子节点还有其他子节点。
当我选择计算机科学时,应该折叠数学节点并扩展计算机科学节点。 怎么能实现这一目标? 建议实现这一目标。
答案 0 :(得分:1)
编辑(感谢 Hans Passant )Handel AfterSelect
或BeforeSelect
事件,并折叠其他兄弟节点。像这样:
private void TreeViewAfterSelect(object sender, TreeViewCancelEventArgs e)
{
foreach (TreeNode node in e.Node.Parent.Nodes)
{
if(node != e.Node)
node.Collapse();
}
}
答案 1 :(得分:0)
检查treeview节点的方法Collapse()
,CollapseAll()
,Expand()
和ExpandAll()
。
treeView1.SelectedNode.Collapse();
在MSDN上阅读Collapse,CollapseAll和Expand。
答案 2 :(得分:0)
基于Ria的解决方案,我们可以使用递归来折叠兄弟姐妹和每个兄弟姐妹的子节点。以下适用于WPF:
private void CollapseAll(ItemsControl Items, bool Collapse)
{
foreach (object obj in Items.Items)
{
ItemsControl ChildControl = Items.ItemContainerGenerator.ContainerFromItem(obj) as ItemsControl;
if (ChildControl != null)
{
CollapseAll(ChildControl, Collapse);
}
TreeViewItem Item = ChildControl as TreeViewItem;
if (Item != null) Item.IsExpanded = false;
}
}
private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeViewItem CurrentItem = (TreeViewItem)treeView1.SelectedItem;
if (CurrentItem == null) return;
if (!(CurrentItem.Parent is TreeViewItem)) return;
TreeViewItem Parent = (TreeViewItem)CurrentItem.Parent;
if (Parent == null) return;
foreach (TreeViewItem TreeViewItem in Parent.Items)
{
if (TreeViewItem != CurrentItem)
{
CollapseAll(TreeViewItem, true);
TreeViewItem.IsExpanded = false;
}
}
}
}