I\'ve almost got this working apart from one little annoying thing...
Because the ListBox selection happens on mouse down, if you start the drag with the mouse down
One option would be not to allow ListBox or ListView to remove selected items until MouseLeftButtonUp is triggered. Sample code:
List removedItems = new List(); private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.RemovedItems.Count > 0) { ListBox box = sender as ListBox; if (removedItems.Contains(e.RemovedItems[0]) == false) { foreach (object item in e.RemovedItems) { box.SelectedItems.Add(item); removedItems.Add(item); } } } } private void ListBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (removedItems.Count > 0) { ListBox box = sender as ListBox; foreach (object item in removedItems) { box.SelectedItems.Remove(item); } removedItems.Clear(); } }