private void Move()
        {
            if (_draggingContainer.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
            {
                return;
            }

            var screenPos = new Win32.POINT();

            if (!Win32.GetCursorPos(ref screenPos))
            {
                return;
            }

            var posToPanel   = treeView.PointFromScreen(new Point(screenPos.X, screenPos.Y));
            var draggingRect = new Rect(posToPanel.X - _cacheMouseDownPosToChild.X, posToPanel.Y - _cacheMouseDownPosToChild.Y, _draggingContainer.ActualWidth, _draggingContainer.ActualHeight);

            if (DoubleUtil.GreaterThan(draggingRect.X, treeView.ActualWidth * 3 / 4) ||
                DoubleUtil.LessThan(draggingRect.Right, treeView.ActualWidth / 4) ||
                DoubleUtil.LessThan(draggingRect.Bottom, 0) ||
                DoubleUtil.GreaterThan(draggingRect.Y, treeView.ActualHeight))
            {
                return;
            }

            var sourcePos = _draggingContainer.TranslatePoint(new Point(), treeView);
            var isSuccess = false;

            if (MoveDirection(sourcePos, draggingRect))
            {
                isSuccess = MoveUp(treeView, draggingRect, ref _draggingContainer, ref _lastOverlapContainer, ref _startOverlapTime);
            }
            else
            {
                isSuccess = MoveDown(treeView, draggingRect, ref _draggingContainer, ref _lastOverlapContainer, ref _startOverlapTime);
            }

            if (isSuccess && _draggingContainer != null)
            {
                _draggingContainer.Focus();
                _draggingContainer.Opacity = 0.2;

                _testSource.ItemsChangedFlag = !_testSource.ItemsChangedFlag;
            }
        }
        private void CheckNewGroupContainerGenerator(ItemContainerGenerator newGroupGenerator)
        {
            if (newGroupGenerator.Status < GeneratorStatus.ContainersGenerated)
            {
                EventHandler handler = null;
                handler = (s, e) =>
                {
                    var generator = (ItemContainerGenerator)s;

                    if (_draggingContainer == null)
                    {
                        generator.StatusChanged -= handler;
                    }
                    else
                    {
                        if (generator.Status == GeneratorStatus.ContainersGenerated)
                        {
                            _draggingContainer = generator.ContainerFromIndex(1) as MultiSelectTreeViewItem;
                            if (_draggingContainer != null)
                            {
                                _draggingContainer.Focus();
                                _draggingContainer.Opacity = 0.2;
                            }

                            generator.StatusChanged -= handler;
                        }
                    }
                };

                newGroupGenerator.StatusChanged += handler;
            }
            else
            {
                _draggingContainer = newGroupGenerator.ContainerFromIndex(1) as MultiSelectTreeViewItem;
            }
        }