Это сообщение в блоге на wyDay имеет решение.
Ссылка на серию из трех частей под названием «Перетаскивание в стиле оболочки в .NET»:
Часть 3 ссылается на этот архив , который содержит целую кучу проектов. Обратите внимание, что для компиляции может потребоваться настроить проекты DragDropLib и WpfDragDropLib, чтобы разрешить небезопасный код.
Там есть образцы внутри, но для удобства вот выдержка:
#region Drop target accepting FileDrop
private void textBox2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = e.AllowedEffect & DragDropEffects.Copy;
DropTargetHelper.DragEnter(textBox2, e.Data, new Point(e.X, e.Y), e.Effect, "Copy to %1", "Here");
}
else
{
e.Effect = DragDropEffects.None;
DropTargetHelper.DragEnter(textBox2, e.Data, new Point(e.X, e.Y), e.Effect);
}
}
private void textBox2_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = e.AllowedEffect & DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
DropTargetHelper.DragOver(new Point(e.X, e.Y), e.Effect);
}
private void textBox2_DragLeave(object sender, EventArgs e)
{
DropTargetHelper.DragLeave(textBox2);
}
private void textBox2_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = e.AllowedEffect & DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
DropTargetHelper.Drop(e.Data, new Point(e.X, e.Y), e.Effect);
if (e.Effect == DragDropEffects.Copy)
AcceptFileDrop(textBox2, e.Data);
}
#endregion // Drop target accepting FileDrop
Из моих экспериментов кажется, что я могу просто написать e.Effect = DragDropEffects.Copy;
вместо e.Effect = e.AllowedEffect & DragDropEffects.Copy;
; хотя в настоящее время я не понимаю, для чего существует &
, поэтому кто-то может помочь мне с этим. Кроме того, похоже, что текстовый тип не будет отображать всплывающую подсказку с описанием.
В противном случае, я определенно очень доволен этим.
Надеюсь, что это поможет любому с этой проблемой.