我想创建一个简单的winforms或wpf应用程序,我可以拖放虚拟“卡”。下面的内容并不是我想要做的,但它是我在网络上发现的最接近用户界面的东西。
所以基本上我想在GUI中有列,我可以从一个列拖动到另一个。
我的问题是:
答案 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