在WPF中拖放

时间:2012-10-18 20:21:01

标签: c# .net wpf events drag-and-drop

我的WPF应用程序中有TreeViewCanvas。我正在尝试实现一些功能,用户可以拖动TreeViewItem,当用户在画布上放下时,应该调用一个方法,将TreeViewItem头作为参数传递给此方法。

这是我到目前为止所做的:

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);
         }
     }
 }

当我拖放到画布时,没有任何反应。因此,我不确定下一步该做什么。我觉得它真的很小,但我很茫然。如何调用该方法并检测标题是否已被删除?

有什么想法吗?

1 个答案:

答案 0 :(得分: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;
        }
    }