Пример #1
0
        private static void OnGridPreviewDragOver(object sender, DragEventArgs e)
        {
            if (_dropData == null)
            {
                return;
            }

            var adapter = GetSelectorAdapter(sender as Selector);

            var  data = _dropData.GetData(typeof(Data)) as Data;
            bool sameSelectorTypes = _senderAdapter.GetType() == adapter.GetType();

            if (sameSelectorTypes)
            {
                var hoveredControl = e.OriginalSource as DependencyObject;

                // update drag visuals
                var currentTargetItem = adapter.GetItem(hoveredControl);
                if (currentTargetItem != null)
                {
                    showInsertLine(currentTargetItem, e.GetPosition(currentTargetItem).Y < currentTargetItem.ActualHeight / 4);
                }
                else
                {
                    hideInsertLine();
                }

                if (adapter.IsValidDropTarget(hoveredControl))
                {
                    e.Effects = (!isCtrlKeyPressed()) ? DragDropEffects.Move : DragDropEffects.Copy;
                }
                else
                {
                    e.Effects = DragDropEffects.None;
                }
            }

            // scroll if necessary
            ScrollViewer sv           = VisualHelpers.FindChild <ScrollViewer>(adapter.Selector);
            double       verticalPos  = e.GetPosition(adapter.Selector).Y;
            double       scrollOffset = getDragScrollOffset(adapter);

            if (verticalPos < DRAG_SCROLL_TOLERANCE)                                      // Top of visible list?
            {
                sv.ScrollToVerticalOffset(sv.VerticalOffset - scrollOffset);              //Scroll up.
            }
            else if (verticalPos > adapter.Selector.ActualHeight - DRAG_SCROLL_TOLERANCE) //Bottom of visible list?
            {
                sv.ScrollToVerticalOffset(sv.VerticalOffset + scrollOffset);              //Scroll down.
            }
            e.Handled = sameSelectorTypes;
        }