我正在使用SilverLight工具包在Silverlight 4 Web應用程序中實現某些拖放功能。我的拖動源是一個列表框,我有18個潛在的拖放目標。我需要根據拖動對象上的字符串值來允許/禁止拖放。在代碼中確定是否允許使用Silverlight工具包進行拖放刪除
我沒有問題做比較,並確定該物品是否被允許放置在目標上,但是,我無法弄清楚最好的事件要處理什麼,以及如何使它不能處理接受下降。
我看了一下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
{
}
};
我試着用上面的代碼,它仍然允許的下降。我目前正在檢查Drop事件處理程序中drop的適用性,並且現在可以正常工作。有空的時候我會重新回顧一遍,然後再試一次。如果它有效,那麼我會標記爲正確的。 – Robaticus 2010-12-06 15:33:57