拖放事件。获取拖动发起的控件的名称,同时在内部放置事件方法中

时间:2015-11-24 19:24:23

标签: c# wpf drag-and-drop

我正在尝试拖放WPF。

我的程序允许您在屏幕上拖动彩色标签,实质上是为了让您感觉到正在拖放方块。

请记住,只拖动文本而不是控件本身(即不是颜色):

我想要实现的是当drop事件触发时,我可以更改拖动文本的标签颜色。 在咨询了MSDN后,我没有弄清楚如何获得有问题的控件,经过大量的反复试验后,我希望有人可以提供帮助。 https://msdn.microsoft.com/en-us/library/system.windows.forms.drageventargs.data(v=vs.110).aspx

下面是一个有效的代码示例,但我要更改的颜色标签是硬编码的,而实际上它可能是多个标签中的任何一个。

private void ObjDrop(object sender, DragEventArgs e)
{
   //testSquare is a hardcoded label
   testSquare.Background = Brushes.LimeGreen;  

   //what I really need is for a variable to detect which label to access each time before I change its colour. So something along the lines of 
    Label myLabel = someCodeToGetTheLabelThatWasDragged;
    myLabel.Background = Brushes.LimeGreen;  

}

希望我事先解释得很清楚,谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用IDataObject.GetData(Type)方法提取DragEventArgs.Data属性中的对象。从那里,您应该能够访问IDataObject中存储的任何内容。

这是一个非常普遍的答案。要实现所述答案,这意味着您必须编写自己的实现IDataObject的类,其中包含原始控件/控件的名称等,然后在初始化时拖动时设置IDataObject

可能有替代解决方案。我会在你当前的例子中看到e.Data的内容,并尝试使用它。如果e.Data类型为Label,则通过转换,您可以通过该方式访问标签,例如(e.Data as Label).Background = Brushes.LimeGreen;

在我看过的拖放实现中,IDataObject包含DropTargetDragSource,这样您就可以比较两者并允许/禁止事物/类型通过设置Effect进行拖放。

答案 1 :(得分:0)

此页面提供了我正在寻找的解决方案。

WPF Drag and Drop - Get original source info from DragEventArgs

以下代码特别用于drop事件方法,这让我实现了我的目标

BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE

之后我可以按照自己的意愿操纵拖拽的来源。