Я пытался сделать возможным перетаскивание элементов между двумя или более списками (в списке «Список задач» и «Выполнение») в моем расширении Visual Studio, но по какой-то причине событие Drop не срабатывает.
Текущий код выглядит так:
private void TaskListBox_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
if (TaskListBox.Items.Count == 0)
return;
if (TaskListBox.SelectedItem == null)
return;
if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
{
string s = TaskListBox.SelectedItem.ToString();
DragDrop.DoDragDrop(TaskListBox, s, DragDropEffects.All);
}
}
private void DoingBox_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
e.Effects = DragDropEffects.All;
else
e.Effects = DragDropEffects.None;
}
private void DoingBox_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
e.Effects = DragDropEffects.All;
else
e.Effects = DragDropEffects.None;
}
private void DoingBox_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
string dataString = (string)e.Data.GetData(DataFormats.StringFormat);
DoingBox.Items.Add(dataString);
}
}
private void DoingBox_DragLeave(object sender, DragEventArgs e)
{
MessageBox.Show("Left or cancelled");
}
Каждое событие работает нормально, за исключением Drop и частично Leave Я могу перетащить свои элементы ListBox в TextBoxes, но не в другие ListBoxes. Когда я отпускаю элемент или даже просто пытаюсь навести курсор на второй ListBox, событие Leave запускается мгновенно.
Что мне здесь не хватает? Решение или, по крайней мере, обходной путь приветствуются.