在winforms或wpf中拖放

Posted

技术标签:

【中文标题】在winforms或wpf中拖放【英文标题】:drag and drop in winforms or wpf 【发布时间】:2010-10-20 06:03:11 【问题描述】:

我想创建一个简单的 winforms 或 wpf 应用程序,我可以在其中拖放虚拟“卡片”。下面这不是我想要做的,但它是我在网上找到的最接近代表用户界面的东西。

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

所以基本上我希望在 GUI 中有列,我可以在其中从一个拖放到另一个。

我的问题是:

    这在 winforms 或 wpf 中会更容易吗 从哪里开始?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

您还应该四处寻找可以为您处理此问题的工具包/框架——我认为 WinForms 和 WPF 都存在它们(虽然不确定)。

【讨论】:

【参考方案4】:

darg 和 drop 的好方法解释为

将拖动检测为 MouseMove 和 MouseLeftButtonDown 的组合

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

通过调用 DoDragDrop() 开始拖动

在您希望允许放置的元素上将 AllowDrop 属性设置为 True。

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

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

你可以找到完整的文章here

【讨论】:

以上是关于在winforms或wpf中拖放的主要内容,如果未能解决你的问题,请参考以下文章

WinForms 互操作,从 WinForms 拖放 -> WPF

在没有 MFC 的 Visual Studio 中拖放 UI 设计器?

从 WinForms 拖放到 WPF 问题

在 WPF 中拖放 ListboxItems

如何通过拖放在 Winform 中将元文件转换为图像

如何在 WPF 或 WinForms 中呈现公式