2012-10-18 56 views
2

我的WPF應用程序中有TreeViewCanvas。我試圖實現功能,用戶可以拖動一個TreeViewItem,當用戶在畫布上放下時,應該調用一個方法,將TreeViewItem頭作爲參數傳遞給此方法。在WPF中拖放和刪除

這是我迄今所做的:

private void TreeViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if (e.Source.GetType().Name.Equals("TreeViewItem")) 
    { 
     TreeViewItem item = (TreeViewItem)e.Source; 

     if (item != null) 
     { 
       DataObject dataObject = new DataObject(); 
       dataObject.SetData(DataFormats.StringFormat, item.Header.ToString()); 
       DragDrop.DoDragDrop(item, dataObject, DragDropEffects.Copy); 
     } 
    } 
} 

當我拖放到畫布上沒有任何反應。因此我不確定接下來應該做什麼。我覺得這個東西很小,但我很茫然。我如何調用該方法並檢測標題已被刪除?

任何想法?

+0

是您的AllowDrop屬性設置爲true? – swabs

+0

是的,只是編輯了問題:) –

+1

你可以發佈一些代碼,顯示你的Canvas和TreeView的標記和代碼隱藏嗎?你應該有一些拖放事件處理程序。那些被提出? –

回答

4

您需要在目標元素上將AllowDrop設置爲true,然後在目標元素上處理DragOverDrop事件。

例子:

private void myElement_DragOver(object sender, DragEventArgs e) 
    { 
     if (!e.Data.GetDataPresent(typeof(MyDataType))) 
     { 
      e.Effects = DragDropEffects.None; 
      e.Handled = true; 
     } 
    } 

    private void myElement_Drop(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(typeof(MyDataType))) 
     { 
      // do whatever you want do with the dropped element 
      MyDataType droppedThingie = e.Data.GetData(typeof(MyDataType)) as MyDataType; 
     } 
    } 
+0

AllowDrop是事實上設置的爲真,所以這不是問題。您能否詳細解釋DragOver和Drop事件部分?這些應該是畫布的事件嗎? canvas'事件如何知道drop應該傳輸TreeViewItem的頭部? –

+0

@DotNET:我編輯了我的答案,以添加DragOver和Drop事件處理程序應該看起來像的骨骼。 –

+0

謝謝,這應該可以幫助我理清我的問題:) –