Как в WPF программно развернуть/свернуть все дочерние элементы TreeView? - CodeHelper

Как в WPF программно развернуть/свернуть все дочерние элементы TreeView?

2

Есть WPF TreeView. необходимо программно развернуть/свернуть все его дочерние элементы. Как это сделать?

Лучший ответ:

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;
            }
    }
}
safonovea

Такой способ не годится. Строка

TreeViewItem treeItem = (TreeViewItem)item;

выбросит exception, т.к. Items содержит привязанные к дереву через ItemsSource данные, но не сами TreeViewItem.

1

Можно использовать свойство IsExpanded объекта TreeViewItem.

TreeViewItem.IsExpanded = true; // Развернуть узел
TreeViewItem.IsExpanded = false; // Свернуть узел

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.