/// <summary>
 /// Raises the <see cref="E:ReorderingCompleted" /> event.
 /// </summary>
 /// <param name="reorderActionCompletedEventArgs">The <see cref="ReorderActionCompletedEventArgs" /> instance containing the event data.</param>
 protected virtual void OnReorderingCompleted(ReorderActionCompletedEventArgs reorderActionCompletedEventArgs)
 {
     if (this.ReorderingCompleted != null)
     {
         this.ReorderingCompleted(this, reorderActionCompletedEventArgs);
     }
 }
        /// <summary>
        /// Hides any drop-indicators that are currently visible.
        /// </summary>
        private void ClearDropTarget()
        {
            foreach (ReorderListBoxItem itemContainer in this.itemsPanel.Children)
            {
                VisualStateManager.GoToState(itemContainer, ReorderListBoxItem.NoDropIndicatorState, false);
                itemContainer.Tag = null;
            }

            reorderActionCompletedEventArgs = null;
        }
        /// <summary>
        /// Updates the targeted index -- that is the index where the item will be moved to if dropped at this point.
        /// </summary>
        private void UpdateDropTargetIndex(ReorderListBoxItem targetItemContainer, bool after)
        {
            int dragItemIndex = this.Items.IndexOf(this.dragItem);
            int targetItemIndex = this.Items.IndexOf(targetItemContainer.Content);

            int newDropTargetIndex;
            if (targetItemIndex == dragItemIndex)
            {
                newDropTargetIndex = dragItemIndex;
            }
            else
            {
                newDropTargetIndex = targetItemIndex + (after ? 1 : 0) - (targetItemIndex >= dragItemIndex ? 1 : 0);
            }

            if (newDropTargetIndex != this.dropTargetIndex)
            {
                reorderActionCompletedEventArgs = new ReorderActionCompletedEventArgs();
                reorderActionCompletedEventArgs.OriginalIndex = dragItemIndex;
                reorderActionCompletedEventArgs.TargetIndex = newDropTargetIndex;
                reorderActionCompletedEventArgs.OriginalSource = this.dragItem;
                reorderActionCompletedEventArgs.TargetObject = targetItemContainer.Content;
                reorderActionCompletedEventArgs.Orinentation = after ? MovingOrientation.Down : MovingOrientation.Up;

                if (dragItemIndex == newDropTargetIndex)
                {
                    reorderActionCompletedEventArgs.Orinentation = MovingOrientation.None;
                }

                this.dropTargetIndex = newDropTargetIndex;
            }
        }