private void MainNodeDragOver(object sender, DragEventArgs e)
        {
            e.Handled = true;
            var dragingItemViewModel = (StyleItemViewModel)e.Data.GetData(typeof(StyleItemViewModel));
            var currentItemViewModel = ((StyleBuilderViewModel)(((Grid)sender)).DataContext);
            var dragingItem          = dragingItemViewModel.StyleItem;
            var currentItem          = currentItemViewModel.RootStyleItem.StyleItem;
            var dragingItemParent    = dragingItem.Parent;
            var currentItemParent    = currentItem.Parent;

            if (dragingItem != null && currentItem != null && dragingItem != currentItem && !IsParent(currentItem, dragingItem))
            {
                if (currentItem.CanContainStyleItem(dragingItem))
                {
                    dragingItemParent.Children.Remove(dragingItem);
                    currentItem.Children.Insert(0, dragingItem);
                    dragingItemViewModel = StyleItemViewModel.FindStyleItemViewModel(currentItemViewModel.RootStyleItem.StyleItemViewModels, dragingItem);
                }
            }

            if (dragingItemViewModel != null)
            {
                dragingItemViewModel.IsSelected = true;
            }
        }
        private void TreeViewItemDragOver(object sender, DragEventArgs e)
        {
            e.Handled = true;
            var dragingItemViewModel = (StyleItemViewModel)e.Data.GetData(typeof(StyleItemViewModel));
            var currentItemViewModel = ((StyleItemViewModel)(((Grid)sender)).DataContext);
            var dragingItem          = dragingItemViewModel.StyleItem;
            var currentItem          = currentItemViewModel.StyleItem;
            var dragingItemParent    = dragingItem.Parent;
            var currentItemParent    = currentItem.Parent;

            if (dragingItem != null && currentItem != null && dragingItem != currentItem && !IsParent(currentItem, dragingItem))
            {
                if (currentItem.CanContainStyleItem(dragingItem))
                {
                    dragingItemParent.Children.Remove(dragingItem);
                    currentItem.Children.Insert(0, dragingItem);
                    dragingItemViewModel = StyleItemViewModel.FindStyleItemViewModel(currentItemViewModel.ParentViewModel.StyleItemViewModels, dragingItem);
                }
                else if (dragingItemParent == currentItemParent)
                {
                    var dragingIndex = dragingItemParent.Children.IndexOf(dragingItem);
                    var currentIndex = dragingItemParent.Children.IndexOf(currentItem);
                    dragingItemParent.Children.Move(dragingIndex, currentIndex);
                }
                else
                {
                    if (currentItemParent is StyleLayerListItem && ((StyleLayerListItem)currentItemParent).CanContainStyleItem(dragingItem))
                    {
                        dragingItemParent.Children.Remove(dragingItem);
                        var currentIndex = currentItemParent.Children.IndexOf(currentItem);
                        currentItemParent.Children.Insert(currentIndex, dragingItem);
                        dragingItemViewModel = StyleItemViewModel.FindStyleItemViewModel(currentItemViewModel.ParentViewModel.StyleItemViewModels, dragingItem);
                    }
                    else
                    {
                        e.Effects = DragDropEffects.None;
                    }
                }

                if (dragingItemViewModel != null)
                {
                    dragingItemViewModel.IsSelected = true;
                }
            }
        }