/// <summary>
        /// Replay an expanded state record to return a sub-tree to its previously expanded/collapsed state.
        /// </summary>
        /// <param name="item">The tree view item.</param>
        /// <param name="expand">The expand record.</param>
        private static void ReplayExpandState(TreeViewItem item, ExpandState expand)
        {
            if (expand.Children == null)
            {
                item.IsExpanded = false;
            }
            else
            {
                item.IsExpanded = true;

                if (item.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
                {
                    TreeViewHelper.ReplayExpandState(item, expand.Children);
                }
                else
                {
                    EventHandler replay = null;

                    replay = delegate(object sender, EventArgs eventArgs)
                    {
                        if (item.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
                        {
                            item.ItemContainerGenerator.StatusChanged -= replay;
                            TreeViewHelper.ReplayExpandState(item, expand);
                        }
                    };

                    item.ItemContainerGenerator.StatusChanged += replay;
                }
            }
        }
        /// <summary>
        /// Create a record of the expanded/collapsed state of a sub-tree.
        /// </summary>
        /// <param name="item">The tree view item.</param>
        /// <returns>The record of the expanded/collapsed state.</returns>
        private static ExpandState RecordExpandState(TreeViewItem item)
        {
            ExpandState expand = new ExpandState()
            {
                Node = item.DataContext as FolderTreeNode
            };

            if (item.IsExpanded)
            {
                expand.Children = new List <ExpandState>();

                foreach (FolderTreeNode node in expand.Node)
                {
                    TreeViewItem treeViewItem = item.ItemContainerGenerator.ContainerFromItem(node) as TreeViewItem;

                    if (treeViewItem != null)
                    {
                        expand.Children.Add(TreeViewHelper.RecordExpandState(treeViewItem));
                    }
                    // We can't wait for the item to be generated, so we'll to ignore it.
                    else
                    {
                        expand.Children.Add(new ExpandState()
                        {
                            Node = node, Children = null
                        });
                    }
                }
            }

            return(expand);
        }
        /// <summary>
        /// Create a record of the expanded/collapsed state of the tree.
        /// </summary>
        /// <param name="view">The tree view.</param>
        /// <returns>The record of the expanded/collapsed state.</returns>
        public static ExpandState RecordExpandState(this FolderTreeView view)
        {
            ExpandState expand = new ExpandState()
            {
                Node = view.ItemsSource as FolderTreeNode, Children = new List <ExpandState>()
            };

            foreach (FolderTreeNode node in expand.Node)
            {
                TreeViewItem treeViewItem = view.ItemContainerGenerator.ContainerFromItem(node) as TreeViewItem;

                if (treeViewItem != null)
                {
                    expand.Children.Add(TreeViewHelper.RecordExpandState(treeViewItem));
                }
                // We can't wait for the item to be generated, so we'll to ignore it.
                else
                {
                    expand.Children.Add(new ExpandState()
                    {
                        Node = node, Children = null
                    });
                }
            }

            return(expand);
        }
        /// <summary>
        /// Replay an expanded state record to return a tree to its previously expanded/collapsed state.
        /// </summary>
        /// <param name="view">The tree view.</param>
        /// <param name="expand">The expand record.</param>
        public static void ReplayExpandState(this FolderTreeView view, ExpandState expand)
        {
            if (view.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
            {
                TreeViewHelper.ReplayExpandState(view, expand.Children);
            }
            else
            {
                EventHandler replay = null;

                replay = delegate(object sender, EventArgs eventArgs)
                {
                    if (view.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
                    {
                        view.ItemContainerGenerator.StatusChanged -= replay;
                        TreeViewHelper.ReplayExpandState(view, expand.Children);
                    }
                };

                view.ItemContainerGenerator.StatusChanged += replay;
            }
        }
示例#5
0
//
//		/// <summary>
//		/// Use to add a UIView to a section, it makes the section opaque, to
//		/// get a transparent one, you must manually call UIViewElement
//		public void Add(UIView view)
//		{
//			if (view == null)
//				return;
//			Add(new UIViewElement(null, view, false));
//		}
//
//		/// <summary>
//		///  Adds the UIViews to the section.
//		/// </summary>fparent
//		/// <param name="views">
//		/// An enumarable list that can be produced by something like:
//		///   from x in ... select (UIView) new UIFoo ();
//		/// </param>
//		public void Add(IEnumerable<UIView> views)
//		{
//			foreach (var v in views)
//				Add(v);
//		}

		public void SetExpandState(ExpandState state)
		{
			if (_ExpandState != state)
			{
				_ExpandState = state;
				
				if (Root != null && IsExpandable)
				{
					if (_HiddenElements == null)
						_HiddenElements = Elements.ToList();

					Root.TableView.BeginUpdates();
					
					if (_ExpandState == ExpandState.Opened)
					{
						Elements.Clear();
						Insert(0, UITableViewRowAnimation.Bottom, _HiddenElements.ToArray());
					}
					else
					{
						_HiddenElements = Elements.ToList();
						RemoveRange(0, Elements.Count, UITableViewRowAnimation.Top);
					}
	
			
					Root.TableView.ReloadSections(new NSIndexSet((uint)Index), UITableViewRowAnimation.None);
					Root.TableView.EndUpdates();
				}
			}
		}
示例#6
0
 public void OnClick()
 {
     // Invert the flags for expansion
     _targetState = _isExpanded ? ExpandState.UNEXPANDED : ExpandState.EXPANDED;
     _isExpanded  = _isExpanded ? false : true;
 }