Обнаружить файл Drag'n'Drop в WPF?

Возможно ли, чтобы окно / элемент WPF обнаруживали перетаскивание файла из проводника Windows в С # .Net 3.5? Я нашел решения для WinForms, но не для WPF.


person NoizWaves    schedule 02.12.2008    source источник


Ответы (4)


К сожалению, средства просмотра TextBox, RichTextBox и FlowDocument всегда помечают события перетаскивания как обработанные, что предотвращает их переход к вашим обработчикам. Вы можете восстановить события перетаскивания, перехваченные этими элементами управления, принудительно обработав события перетаскивания (используйте UIElement.AddHandler и установите для handledEventsToo значение true) и установив для e.Handled значение false в вашем обработчике.

person Ed Ball    schedule 03.12.2008
comment
Ваше здоровье! Здесь также обсуждается ваша идея: social.msdn.microsoft.com/forums/en-US/wpf/thread/ - person NoizWaves; 03.12.2008

Попробуйте следующее:

    private void MessageTextBox_Drop(object sender, DragEventArgs e)
    {
        if (e.Data is DataObject && ((DataObject)e.Data).ContainsFileDropList())
        {
            foreach (string filePath in ((DataObject)e.Data).GetFileDropList())
            {
                // Processing here     
            }
        }
    }


    private void MessageTextBox_PreviewDragEnter(object sender, DragEventArgs e)
    {
        var dropPossible = e.Data != null && ((DataObject)e.Data).ContainsFileDropList();
        if (dropPossible)
        {
            e.Effects = DragDropEffects.Copy;
        }
    }

    private void MessageTextBox_PreviewDragOver(object sender, DragEventArgs e)
    {
        e.Handled = true;
    }
person AvSomeren    schedule 22.04.2011

Оказывается, я не мог по какой-то причине зайти в TextBox, но падение на кнопки работает нормально. Он заработал, добавив 'AllowDrop = "True"' в мое окно и добавив обработчик события перетаскивания к кнопке, состоящей из:

private void btnFindType_Drop(object sender, DragEventArgs e)
{
  if (e.Data is System.Windows.DataObject &&
    ((System.Windows.DataObject)e.Data).ContainsFileDropList())
  {
    foreach (string filePath in ((System.Windows.DataObject)e.Data).GetFileDropList())
    {
      // Processing here
    }
  }            
}
person NoizWaves    schedule 02.12.2008

У меня была аналогичная проблема: события перетаскивания и перетаскивания не запускались. Проблема была в настройках учетной записи пользователя Windows. Установите наименее безопасную настройку и попробуйте тот же код, который работает.

person DiAgo    schedule 22.03.2012