/// <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; } }
// // /// <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(); } } }
public void OnClick() { // Invert the flags for expansion _targetState = _isExpanded ? ExpandState.UNEXPANDED : ExpandState.EXPANDED; _isExpanded = _isExpanded ? false : true; }