Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: WPF Drag out Добавлено: 30.07.10 00:43  

Автор вопроса:  Skywalker | Web-сайт: iSkywalker.ru | ICQ: 300-70-6пятьЪ 
мне необходимо реализовать следующие операции drag'n'drop для листвью: перемещение элемента в пределах самого листвью (т.е. просто менять элементы местами), вставка элемента при перетаскивании из проводника, и вставка элемента из листвью в проводник. 1,2 я сделал, вот код:

private void albumsListView_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            startPointAlbumsListView = e.GetPosition(null);
            oldIndexAlbumsViewList = this.GetCurrentIndex(albumsListView, e.GetPosition);
        }

        private void albumsListView_MouseMove(object sender, MouseEventArgs e)
        {
            
            {
                Point mousePos = e.GetPosition(null);
                Vector diff = startPointAlbumsListView - mousePos;

                if (e.LeftButton == MouseButtonState.Pressed &&
                    Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance &&
                    Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
                {
                    ListView listView = sender as ListView;

                    ListViewItem listViewItem =
                        FindAnchestor<ListViewItem>((DependencyObject)e.OriginalSource);

                    if (listViewItem != null)
                    {
                        Album album = //albums[oldIndexAlbumsViewList];
                            (Album)listView.ItemContainerGenerator.
                            ItemFromContainer(listViewItem);

                        DataObject dragData = new DataObject("albumFormat", album);

                        DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Move);
                    }
                }
            }
        }
private void albumsListView_DragEnter(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent("albumFormat") || !e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effects = DragDropEffects.None;
            }
        }

        private void albumsListView_Drop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent("albumFormat"))
            {
                //меняем альбомы местами
            }
            else if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                //создаем альбомы на основе папок из проводника
            }
        }



вопрос такой, а как сделать drag'n'drop ИЗ листвью В проводник?

если просто в MouseMove добавить еще
DataObject dragData2 = new DataObject(DataFormats.FileDrop, album.Photos.Select(ph => ph.Src).ToArray());
DragDrop.DoDragDrop(listViewItem, dragData2, DragDropEffects.Copy);


то в проводник приходит только результат первого DoDragDrop, в котором формат данных albumFormat стоит, и проводник естесно показывает курсор - зачеркнутый кружок, типа низя такого вставить, ну и тем более даже если это удастся, придется как-то остлеживать ситуацию, если юзер отпустит мышку на самом листвью: нужно будет догадываться, либо это из проводника вставка идет элемента, либо юзер просто не донес элемент до проводника и отпустил кнопку.

еще такой момент, что когда элемент перетаскиваем в проводник, должно запуститься скачивание файлов и вставится в проводник вместо перетаскиваемых данных, так что хорошо бы отловить событие прямо тогда, когда юзер уже отпускает мышку на проводнике, чтобы лишний раз не качать файлы, если вдруг юзер передумает и нажмет ескейп, например

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 30.07.10 01:08
понял, как устанавливать несколько форматов данных:
  1. dragData.SetData(еще один формат, данные)


но, видимо, придется отказаться от идеи перетаскивания в проводник, потому что заранее сливать фотки в большом разрешении на винт, чтобы быстро сформировать пути для драгндропа, нельзя, вдруг там их много и весят дофига (в листвью я отображаю мелкие превьюхи), а если начинать сливать фотки в MouseMove, то эт тормоза жуткие будут.

я прав, выхода нет?)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам