Friday, January 6, 2012

HOW TO: Silverlight Treeview - Expand all nodes

Here is some code that you can use to Expand All the nodes of a Treeview control in Silverlight.


public class TreeViewExtensions
    {
        public static void ExpandAll(this TreeView treeView)
        {
            for (Int32 i = 0; i < treeView.Items.Count; ++i)
            {
                TreeViewItem item = treeView.ItemContainerGenerator.ContainerFromIndex(i) as TreeViewItem;
                if (item != null)
                {
                    bool ret = ExpandAll(item, treeView);
                    if (ret == true)
                    {
                        item.IsExpanded = true;
                    }
                }
            }
        }

        static bool ExpandAll(TreeViewItem item, TreeView treeView)
        {
            bool expandParent = false;

            if (!item.IsExpanded)
            {
                item.IsExpanded = true;
                item.Dispatcher.BeginInvoke(() => ExpandAll(item, treeView));
                expandParent = true;
            }
            else
            {
                if (item.HasItems)
                {
                    for (Int32 i = 0; i < item.Items.Count; ++i)
                    {
                        TreeViewItem childItem = item.ItemContainerGenerator.ContainerFromIndex(i) as TreeViewItem;
                        if (childItem != null)
                        {
                            bool ret = ExpandAll(childItem, treeView);
                            if (ret == true && expandParent == false)
                            {
                                childItem.IsExpanded = true;
                                expandParent = true;
                            }
                        }
                    }

                    if (expandParent == false)
                    {
                        item.IsExpanded = false;
                    }
                }
            }

            return expandParent;
        }
    }

0 comments:

Post a Comment