【问题标题】:Drag and drop event. Get the name of the control where the drag originated, whilst inside drop event method拖放事件。获取拖动源控件的名称,同时在 drop 事件方法中
【发布时间】:2016-02-27 09:26:04
【问题描述】:

我正在尝试在 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;  

}

希望我解释的足够好,提前谢谢。

【问题讨论】:

  • e.OriginalSourcee.Source 不包含发起拖动事件的控件?
  • e.Source 让我走上了正轨。然而,使用我现在拥有的代码,它正在改变目的地的颜色,或者发生“drop”的标签。我正在寻找更改发生“拖动”的标签的颜色,但我只需要在下降本身发生后才发生这种情况。从“放置”事件中传递或访问“拖动”标签及其属性的理想方式是什么?或者有没有想到的更整洁的方式?

标签: c# wpf drag-and-drop


【解决方案1】:

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

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

可能有其他可用的解决方案。我会观察您当前示例中的 e.Data 是什么,并尝试使用它。如果e.DataLabel 类型,通过强制转换,您可以通过这种方式访问​​标签,例如(e.Data as Label).Background = Brushes.LimeGreen;

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

【讨论】:

  • 最后一天才开始研究这个。它让我找到了明确的答案。干杯人。
【解决方案2】:

这个页面为我想要做的事情提供了解决方案。

WPF Drag and Drop - Get original source info from DragEventArgs

在 drop 事件方法中特别使用的以下代码使我能够实现我的目标

Label lbl = e.Data.GetData("System.Windows.Controls.Label") as Label;

之后,我可以随心所欲地操纵拖动的来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2015-10-15
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多