2010-12-02 22 views
0

我正在使用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 
       { 

       } 


      }; 

回答

0

好,我很接近。正如@詹姆斯曼寧在他的回答中所說:「只要將影響改變爲無......應該就夠了。」

所以,只要你在正確的地方做到這一點,我已經把我的代碼在DragEnter事件處理程序中處理這個事件,它應該在DragOver事件處理程序中完成。改變DragEnter中的效果就像Rainier Wolfcastle的放射性男士護目鏡 - 他們什麼都不做。

所以,這工作的代碼如下:

lbDragDrop.DragOver += (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 
      { 

      } 


     }; 
1

只是改變影響到無(像你這樣做),應該是不夠的 - 一個很好的例子是一些在該工具包中本身樹形視圖拖放目標內部碼的(該SetEffects方法)

http://silverlight.codeplex.com/SourceControl/changeset/view/57505#779753

+0

我試着用上面的代碼,它仍然允許的下降。我目前正在檢查Drop事件處理程序中drop的適用性,並且現在可以正常工作。有空的時候我會重新回顧一遍,然後再試一次。如果它有效,那麼我會標記爲正確的。 – Robaticus 2010-12-06 15:33:57

相關問題