private static void ItemsControl_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (sender is ItemsControl itemsControl)
            {
                DragStatusEnum dragStatus = GetDragStatus(itemsControl);

                switch (dragStatus)
                {
                case DragStatusEnum.None:
                    break;

                case DragStatusEnum.Begining:
                {
                    if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
                    {
                        Vector vector = e.GetPosition(itemsControl) - mouseDownPoint;
                        if (vector.X > dragBeginedOffset || vector.Y > dragBeginedOffset)
                        {
                            SetDragStatus(itemsControl, DragStatusEnum.Draging);

                            if (dragInfo.ItemContainer is FrameworkElement frameworkElement)
                            {
                                frameworkElement.CaptureMouse();
                                if (dragAdorner != null)
                                {
                                    dragAdorner.Detath();
                                }
                                Point offset = e.GetPosition(frameworkElement);
                                dragAdorner = new DragAdorner(itemsControl, frameworkElement, new Point()
                                    {
                                        X = -offset.X, Y = -offset.Y
                                    });
                            }
                        }
                    }
                }
                break;

                case DragStatusEnum.Draging:
                {
                    if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
                    {
                        if (dragAdorner != null)
                        {
                            dragAdorner.UpdatePoint(e.GetPosition(itemsControl));
                        }

                        if (GetItem(itemsControl.ItemContainerGenerator, itemsControl.InputHitTest(e.GetPosition(itemsControl)), out DependencyObject itemContainer, out object item))
                        {
                            if (/*itemContainer != dragInfo.ItemContainer && */ itemContainer is FrameworkElement frameworkElement)
                            {
                                if (lineAdorner == null)
                                {
                                    lineAdorner = new LineAdorner(itemsControl);
                                    lineAdorner.UpdateBrush(GetDropTargetLineBrush(itemsControl), GetDropTargetLineThickness(itemsControl));
                                    lineAdorner.UpdateTarget(e.MouseDevice, frameworkElement, GetItemPanelOrientation(itemsControl));
                                }
                                else
                                {
                                    lineAdorner.UpdateTarget(e.MouseDevice, frameworkElement, GetItemPanelOrientation(itemsControl));
                                }
                            }
                        }
                        else
                        {
                            if (lineAdorner != null)
                            {
                                lineAdorner.ClearTarget();
                            }
                        }

                        e.Handled = true;
                    }
                }
                break;