Exemplo n.º 1
0
 /// <summary>
 /// Inserts the visual child.
 /// And invalidates all impacted measures
 /// </summary>
 /// <param name="node">The node.</param>
 /// <param name="index">The index.</param>
 public void InsertVisualChild(FlatNode node, int index)
 {
     VisualChildren.Insert(index, node);
     for (int i = index + 1; i < VisualChildren.Count; i++)
     {
         VisualChildren[i]._childOffset++;
     }
     AdjustAncestorsSize(+1);
 }
Exemplo n.º 2
0
        //--------------------------------------------------------------
        #region Methods
        //--------------------------------------------------------------

        private void OnChildrenChanged(object sender, CollectionChangedEventArgs <UIControl> eventArgs)
        {
            // Children are also stuffed into the VisualChildren. Both collections should use
            // the same order.

            // Handle moved items.
            if (eventArgs.Action == CollectionChangedAction.Move)
            {
                // Move visual children too.
                VisualChildren.Move(eventArgs.OldItemsIndex, eventArgs.NewItemsIndex);
                return;
            }

            // Handle removed items.
            foreach (var oldItem in eventArgs.OldItems)
            {
                VisualChildren.Remove(oldItem);
            }

            // Handle new items.
            int newItemsIndex = eventArgs.NewItemsIndex;

            if (newItemsIndex == -1)
            {
                // Append items.
                foreach (var newItem in eventArgs.NewItems)
                {
                    VisualChildren.Add(newItem);
                }
            }
            else
            {
                // Make sure that the same order is used in both collections.
                foreach (var newItem in eventArgs.NewItems)
                {
                    VisualChildren.Insert(newItemsIndex, newItem);
                    newItemsIndex++;
                }
            }

            InvalidateMeasure();
        }