Метод WPF DragDrop.DoDragDrop
имеет DragSource
в качестве своего первого параметра.Получение DoDragDrop DragSource
Есть ли способ получить этот объект DragSource
в OnDrop
или других событиях перетаскивания?
Метод WPF DragDrop.DoDragDrop
имеет DragSource
в качестве своего первого параметра.Получение DoDragDrop DragSource
Есть ли способ получить этот объект DragSource
в OnDrop
или других событиях перетаскивания?
Короткий ответ - нет, потому что когда вы получаете событие Drag (или DragEnter и т. Д.), Объект источника перетаскивания может быть где угодно. Это может быть в другом процессе. Это может быть в собственном коде. Это может быть даже на другой машине, если RDP-подобный протокол достаточно сложный, чтобы справиться с этим. Другими словами, нет гарантии, что управляемый DoDragDrop был даже вызван, и если бы не было никакой гарантии, он был вызван из этого процесса.
НО если вы пишете код, который вызывает DoDragDrop
и также писать код для OnDrop()
, есть простой способ, чтобы получить этот эффект:
В вызове DoDragDrop, добавить свой объект как дополнительный формат:
var dragSource = this;
var data = "Hello";
var dataObj = new DataObject(data);
dataObj.SetData("DragSource", dragSource);
DragDrop.DoDragDrop(dragSource, dataObj, DragDropEffects.Copy);
Теперь в обработчике OnDrag это легко получить источник сопротивления:
protected override void OnDrop(DragEventArgs e)
{
var data = e.Data.GetData(DataFormats.Text);
var dragSource = e.Data.GetData("DragSource");
...
}
В некоторых случаях, зная исходный объект сам по себе достаточно, чтобы получить данные, которые вы требуете, чтобы завершить операцию перетаскивания, в этом случае выше сводится к:
DragDrop.DoDragDrop(dragSource, dragSource, DragDropEffects.Copy);
...
var dragSource = e.Data.GetData(typeof(MyDragSource));
Обратите внимание, что в любом из этих случаев, если источник операции перетаскивания находится где-то иначе, чем ваш код (например, перетаскивание файла из Emplorer), вы получите dragSource = null
Поскольку короткий ответ «нет», то какова цель параметра dragSource для DragDrop. DoDragDrop? Как он используется? – HappyNomad