DragAndDrop в ListView не задевая панель скроллинга

При вызове ивента MouseMove и последующем Drag&Drop при выделенном элементе в GridView внутри ListView срабатывает ивент даже если курсор сейчас на панели пролистывания, то есть при таком методе перетаскивания невозможно проскроллить ListView, можно ли как-то "убрать" срабатывание ивента MouseMove, вернее DragAndDrop'a, если курсор сейчас находится напротив ScrollBar'a?

draganddrop

        <ListView x:Name="listView"...
                  MouseMove="lstItems_MouseMove"
                  >
    private void listView_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            if (e.Source != null)
            {
                DataModel selectedItem = (DataModel)listView.SelectedItem;

                DragDrop.DoDragDrop(listView, selectedItem, DragDropEffects.Move);                  
            }
        }
    }

Ответы (1 шт):

Автор решения: Ivan Silkin

Решилось следующим образом:

        protected void LstItems_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ; //Если точный объект, на котором вызывается событие – это объект ListView Item
            if (null == (((FrameworkElement)e.OriginalSource).DataContext as Composition))
                return;

            if (e.ButtonState == MouseButtonState.Pressed)
            {
                if (e.Source != null)
                {
                    List<IComposition> myList = new List<IComposition>();
                    foreach (IComposition Item in lstItems.SelectedItems)
                    {
                        myList.Add(Item);
                    }

                    DataObject dataObject = new DataObject(myList);
                    DragDrop.DoDragDrop(lstItems, dataObject, DragDropEffects.Move);
                }
            }
            //ApplyToSelectedItems(RenameCompositionFiles);
        }
        <ListView ...
                  PreviewMouseLeftButtonDown="lstItems_MouseLeftButtonDown"

Здесь Composition - это тип объекта из коллекции ItemsSource для ListView/GridView.

Если нужно, чтобы DrapAndDrop включался только после того, как мышь нажата и передвинута, то можно также вставить дополнительный метод через Dispatcher, чтобы PreviewMouseMove не блокировал выбор элемента из списка, если не работает событие "MouseLeftButtonDown" из-за особенностей реализации, а собития Click у ListView нету, тогда делаем по типу:

        private void lstItems_MouseLeftButtonDown(object sender, MouseButtonState state, object source)
        {
            Application.Current.Dispatcher.BeginInvoke(
                new Action(delegate
                {
                   // вставьте здесь обработку нажатия кнопки уже после щелчка по текущему элементу, типа вызова DragAndDrop (код из предыдыщуего метода)
                })
            );
        }

        protected void LstItems_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ; // И вызываем пост-обработку нажатия кнопки с перетаскиванием через таск
            var tsk = Task.Factory.StartNew(() =>
                    lstItems_MouseLeftButtonDown(sender, e.ButtonState, e.Source)
            );
        }
→ Ссылка