我在*winform应用程序上有一个treeview控件。在这里,我要做的是:在他的级别上折叠所有其他节点,并且只扩展选定的节点。例如,假设场景:-所有科目+计算机科学+数学
根节点是"All Subject“,两个子节点是1)计算机科学和2)E 211数学。这两个子节点具有更多的子节点。
当我选择“计算机科学”时,应该折叠数学节点,扩展计算机科学节点。如何实现这一点?欢迎关于实现这一目标的建议。
发布于 2012-07-10 05:16:43
编辑(感谢汉斯·帕桑特) Handel AfterSelect或BeforeSelect事件,并折叠其他兄弟节点。就像这样:
private void TreeViewAfterSelect(object sender, TreeViewCancelEventArgs e)
{
foreach (TreeNode node in e.Node.Parent.Nodes)
{
if(node != e.Node)
node.Collapse();
}
}发布于 2012-07-10 05:07:28
检查treeview节点的Collapse()、CollapseAll()、Expand()和ExpandAll()方法。
treeView1.SelectedNode.Collapse();阅读MSDN上的崩溃、CollapseAll和扩展。
发布于 2015-12-04 15:39:04
在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;
}
}
}
}https://stackoverflow.com/questions/11406669
复制相似问题