Есть WPF TreeView. необходимо программно развернуть/свернуть все его дочерние элементы. Как это сделать?
Как в WPF программно развернуть/свернуть все дочерние элементы TreeView?
2
Спросил
Лучший ответ:
1
Видел ещё подобный пример:
private static void ExpandRecursively(ItemsControl itemsControl, bool expand)
{
ItemContainerGenerator itemContainerGenerator = itemsControl.ItemContainerGenerator;
for (int i = itemsControl.Items.Count - 1; i >= 0; --i)
{
ItemsControl childControl = itemContainerGenerator.ContainerFromIndex(i) as ItemsControl;
if (childControl != null) ExpandRecursively(childControl, expand);
}
TreeViewItem treeViewItem = itemsControl as TreeViewItem;
if (treeViewItem != null)
treeViewItem.IsExpanded = expand;
}
Новые ответы
-1
Так думаю получиться:
// this loop expands all nodes
bool expand = true; //maybe false
foreach (object item in myTreeView.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem, expand);
treeItem.IsExpanded = expand;
}
}
Сам метод рекурсивно пробегает все узлы
private void ExpandAllNodes(TreeViewItem rootItem, bool expand)
{
foreach (object item in rootItem.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem, expand);
treeItem.IsExpanded = expand;
}
}
}
1
Можно использовать свойство IsExpanded объекта TreeViewItem.
TreeViewItem.IsExpanded = true; // Развернуть узел
TreeViewItem.IsExpanded = false; // Свернуть узел
Такой способ не годится. Строка
выбросит exception, т.к.
Items
содержит привязанные к дереву черезItemsSource
данные, но не самиTreeViewItem
.