拖放winforms或wpf

时间:2009-04-18 02:47:33

标签: wpf winforms drag-and-drop

我想创建一个简单的winforms或wpf应用程序,我可以拖放虚拟“卡”。下面的内容并不是我想要做的,但它是我在网络上发现的最接近用户界面的东西。

http://www.greenpeppersoftware.com/confluence/plugins/advanced/gallery-slideshow.action?imageNumber=1&pageId=24870977&decorator=popup&galleryTitle=Task+board+and+transitions

所以基本上我想在GUI中有列,我可以从一个列拖动到另一个。

我的问题是:

  1. 在winforms或wpf
  2. 中会更容易
  3. 我从哪里开始?

4 个答案:

答案 0 :(得分:2)

在winForms和WPF中,拖放操作都可以通过处理目标DragOver和Drop上的事件以类似的方式完成。

然而,对于WPF,您还有其他选择。您还可以通过在拖动时使用缩略图使应用程序看起来更好(这在winforms中可能但更难实现)。

看看this WPF sample它使用了一个帮助程序类,并认为它完全符合您的需要。

答案 1 :(得分:2)

我同意John的说法,因为WinForms和WPF彼此非常接近w.r.t.拖放。但是WPF为ItemsControl提供了更多的“通用基础”,允许实现更多独立于最终使用的UI元素(ListBox,ListView,TreeView ......可以轻松切换)。显然WPF允许更多花哨的效果。

我强烈推荐这篇博文: http://www.beacosta.com/blog/?p=53 对于一些拖拉的基础知识和一个干净的WPF拖放方法。 它显示了一个很好的实现一个相当通用的帮助器,用于从/向WPF ItemsControls拖拽,我真的很喜欢“插入式装配器”。而且我确实喜欢通过使用附加属性将drag'n'drop代码与用户控件本身完美地分开,这使得它更易于使用和维护。

答案 2 :(得分:0)

在WPF中可能会稍微容易一些,因为Thumb控件提供了易于使用的内置拖动支持。 (如果我没记错的话,在WinForms中,您需要自己处理鼠标事件,而WPF Thumb会为您执行此操作并将其转换为拖动开始,增量和结束事件。)

但是,如果你比其他框架更熟悉一个框架,那可能会使Thumb控件产生的差异相形见绌。

您还应该查看可以为您处理此问题的工具包/框架 - 我认为它们同时适用于WinForms和WPF(不确定)。

答案 3 :(得分:0)

darg和drop的好方法解释为

将MouseMove与MouseLeftButtonDown结合起来检测拖动

找到要拖动的数据,并创建一个包含格式,数据和允许的效果的DataObject。

通过调用DoDragDrop()

启动拖动

在要允许删除的元素上将AllowDrop属性设置为True。

将处理程序注册到DragEnter事件以检测拖放位置上的拖动。通过在事件args上调用GetDataPresent()来检查格式和数据。如果可以删除数据,请在事件参数上设置Effect属性以显示相应的鼠标光标。

当用户释放鼠标按钮时,将调用DragDrop事件。通过在事件args中提供的Data对象上调用GetData()方法来获取数据。

您可以找到完整的文章here