【发布时间】:2011-06-16 12:56:10
【问题描述】:
我正在使用 WPF 表单为我的游戏创建地图编辑器。 我有一个问题。如何将图块(图像)拖放到指定位置?
我会尽量详细说明我的需求。以这张图片为例:
所以我想要的是每个图块 - 将由用户选择并拖动到网格区域 - 被“吸引”到一个单元格。明白了吗? 这样用户就可以在其位置看到每个图块。
有人知道如何实现吗?
谢谢。
【问题讨论】:
标签: .net wpf user-interface
我正在使用 WPF 表单为我的游戏创建地图编辑器。 我有一个问题。如何将图块(图像)拖放到指定位置?
我会尽量详细说明我的需求。以这张图片为例:
所以我想要的是每个图块 - 将由用户选择并拖动到网格区域 - 被“吸引”到一个单元格。明白了吗? 这样用户就可以在其位置看到每个图块。
有人知道如何实现吗?
谢谢。
【问题讨论】:
标签: .net wpf user-interface
我不完全确定您是否在询问“如何实现拖放?”或“如何防止用户在指定位置以外的任何地方掉线?”,所以我尝试提供一些关于两者的线索。
如何实现拖放?
要获得基本的拖放功能,您可以执行以下操作:
将所需拖动目标的 AllowDrop 属性设置为 true。
连接 OnMouseMove 和 MouseLeftButtonDown 以便能够检测 D&D 操作的开始。 (此事件在 System.Windows.UIElement 中)
连接 OnPreviewDragEnter、OnPreviewDragLeave、OnPreviewDragOver、OnPreviewDrop(此事件在 System.Windows.DragDrop 中)
然后您监听 OnMouseMove 和 MouseLeftButtonDown,直到用户初始化拖动操作(即在按下鼠标左键时移动 SystemParameters.MinimumHorizontalDragDistance 或 SystemParameters.MinimumVerticalDragDistance 宽度)
此时您必须使用 DragDrop.DoDragDrop 初始化 D&D 操作
初始化后,您将监听上面列出的所有拖动事件,但要获得基本功能,监听 OnPreviewDrop 就足够了。
如何防止用户在指定位置以外的任何地方掉线?
在您实现了 D&D 功能之后,实现这一点非常简单。只需检查 OnPreviewDrop 的发送者是否是当前活动的放置目标,如果不是则忽略放置事件。
更多
要查找更多详细信息,您应该访问此Drag and Drop Overview。 由于这是一款您可能希望在拖动时显示拖动内容的游戏,您可以通过adorners 实现此目的。提供的示例不足以显示拖动图像的预览,但 google 列出了许多关于该主题的好示例。
【讨论】: