перетаскивание списка в wpf - PullRequest
       30

перетаскивание списка в wpf

3 голосов
/ 23 февраля 2010

В настоящее время я портирую приложение windows form на wpf.В нем есть список с именами файлов.Должна быть возможность перетаскивать (несколько) элементов в проводник Windows.Это было легко сделать со старой формой Windows, но я не могу найти способ, как это можно сделать в wpf.

Этот код я использовал с формами Windows:

void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
    string[] files = GetSelection();
    if (files != null)
    {
        DoDragDrop(new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy );  
    }
}

Ответы [ 4 ]

2 голосов
/ 24 февраля 2010

Хорошо ... Я нашел решение для моей Проблемы, основываясь на этом руководстве :

    private void List_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        // Store the mouse position
        startPoint = e.GetPosition(null);
    }

    private void List_MouseMove(object sender, MouseEventArgs e)
    {
        // Get the current mouse position
        Point mousePos = e.GetPosition(null);
        Vector diff = startPoint - mousePos;

        if (e.LeftButton == MouseButtonState.Pressed &&
            Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance &&
            Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
        {
            if (listView1.SelectedItems.Count == 0)
            {
                return;
            }

            string[] files = GetSelection();
            string dataFormat = DataFormats.FileDrop;
            DataObject dataObject = new DataObject(dataFormat, files);
            DragDrop.DoDragDrop(listView1, dataObject, DragDropEffects.Copy);
        }
    }
1 голос
/ 09 февраля 2015
try this code that help u to solve your problem



public partial class MainWindow : Window
    {
        List<string> file = new List<string>();
        public MainWindow()
        {
            InitializeComponent();
            file.Add(@"D:\file1.txt");
            file.Add(@"D:\folder1");
            file.Add(@"D:\folder2");
            file.Add(@"D:\folder3");
            lstTest.DataContext = file;
        }


        private Point start;
        private void lstTest_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.start = e.GetPosition(null);
        }

        private void lstTest_MouseMove(object sender, MouseEventArgs e)
        {
            Point mpos = e.GetPosition(null);
            Vector diff = this.start - mpos;
            if (e.LeftButton == MouseButtonState.Pressed && Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance && Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
            {
                if (this.lstTest.SelectedItems.Count == 0)
                {
                    return;
                }
                string[] Files = new string[file.Count] ;
                for (int i = 0; i < file.Count; i++)
                {
                    Files[i] = file[i];
                }
                string dataFormat = DataFormats.FileDrop;
                DataObject dataObject = new DataObject(dataFormat, (lstTest.SelectedItems.Cast<string>()).ToArray<string>());
                DragDrop.DoDragDrop(this, dataObject, DragDropEffects.Copy);
            }
        }
    }
1 голос
/ 24 февраля 2010

Попробуйте заглянуть в блог Bea Stollnitz, где подробно описаны возможности перетаскивания в WPF.

Bea Stollnitz - Как я могу перетаскивать элементы между привязанными данными ItemsControls?

0 голосов
/ 23 февраля 2010

убедитесь, что вы отметили (флажок) вариант множественного выбора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...