Здесь у вас сложный сценарий, поэтому он начнется с базового уровня в надежде дать вам направление и, надеюсь, найти решение.
Каркас будет информировать о событии DragEnter, только если элемент управления помечен как AllowDrop =.правда.Поэтому убедитесь, что вы сделали это.Звучит так, как будто у вас есть, но я просто хочу быть уверен.
Я не уверен, зачем вам нужно событие DragLeave, но если это захват выбранных данных, самый простой способ получить данные - это не подключиться кDragLeave, но подключиться к PreviewMouseMove.Затем вы можете определить, нажата ли мышь и как далеко от нее пройти, прежде чем принимать DoDragDrop.
В этом случае у вас также есть возможность добавлять и анализировать данные перетаскивания.Когда начинается перетаскивание, вы можете создать новый объект DataObject и отправить его с помощью вызова DoDragDrop:
private static void listBox_PreviewMouseMove(object sender, MouseEventArgs e)
{
// Get the current mouse position
var mousePos = e.GetPosition(null);
var diff = startPoint - mousePos;
if (canScroll && e.LeftButton == MouseButtonState.Pressed &&
(Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance))
{
var dataObject = (from lbi in startList.Items.Cast<object>().Select((t, i) => (ListBoxItem)startList.ItemContainerGenerator.ContainerFromIndex(i)) where lbi != null && lbi.IsSelected select Convert.ToString(lbi.Content)).ToList();
// Initialize the drag & drop operation
var listBoxData = new ListBoxData(){ StartList = startList, Data = dataObject};
var dragData = new DataObject("listBoxData", listBoxData);
System.Windows.DragDrop.DoDragDrop(startList, dragData, DragDropEffects.Move);
}
}
Эти данные перетаскивания теперь доступны через объект DragEventArgs с помощью (если вы не переименовываете параметр события,это е):
e.Data.GetData("listBoxData")
Я предлагаю добавить некоторую уникальную информацию к данным события перетаскивания, чтобы дифференцировать событие на основе данных.Либо ваш элемент данных из списка выбора, либо новый класс, содержащий ваш элемент данных и другой индикатор, если это необходимо.