Я использую набор инструментов SilverLight для реализации некоторых функций перетаскивания в веб-приложении Silverlight 4. Мой источник перетаскивания - это список, и у меня есть восемнадцать потенциальных целей перетаскивания. Мне нужно разрешить / запретить удаление, основываясь на строковом значении перетаскиваемого объекта.
У меня нет проблем с проведением сравнения и определением, разрешено ли выбрасывание предмета на цель, однако у меня возникают проблемы с выяснением, какое событие лучше всего обрабатывать, и как заставить его не принимать падение.
Я посмотрел на событие DragEnter, и это выглядит как лучшее место, чтобы справиться с этим, но я не совсем уверен, что мне нужно сделать, чтобы оно не упало. Вот фрагмент кода, который я пробовал, но он не предотвращает падение:
lbDragDrop.DragEnter += (src, e) =>
{
VaultSocketViewModel vm = this.DataContext as VaultSocketViewModel;
ListBoxDragDropTarget target = src as ListBoxDragDropTarget;
ObservableCollection<ItemModel> listBoxBinding = vm.Slots[target.Name];
object data = e.Data.GetData(e.Data.GetFormats()[0]);
ItemDragEventArgs eventArgs = data as ItemDragEventArgs;
SelectionCollection coll = eventArgs.Data as SelectionCollection;
ItemModel newItem = coll.Select(t => t.Item).OfType<ItemModel>().FirstOrDefault();
if (!target.Name.StartsWith(newItem.ItemSlot)) // don't allow drop
{
e.Effects = Microsoft.Windows.DragDropEffects.None;
e.Handled = true;
}
else
{
}
};