//-------------------------------------------------------------- #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(); }