Apache flex 如何限制画布中的拖放区域

Apache flex 如何限制画布中的拖放区域,apache-flex,actionscript,drag-and-drop,Apache Flex,Actionscript,Drag And Drop,我有一个画布,比如尺寸500x600。我在画布内有一些控件。用户可以通过拖放来重新排列控件。但我想限制该画布内的拖放 例如:画布中有一个按钮。用户可以将该按钮拖放到画布中的任何位置。但是,如果用户试图将该按钮拖出画布边界,则该按钮应粘贴在画布边界中 如何实现这一点?您应该捕获目标控件上的MouseDown事件,然后订阅MouseMove事件。在MouseMove处理程序中,您应该获得画布和控件的矩形(在相同的坐标空间中),并使用containsRect()方法(文档是)确定控件是否仍在画布中。如

我有一个画布,比如尺寸500x600。我在画布内有一些控件。用户可以通过拖放来重新排列控件。但我想限制该画布内的拖放

例如:画布中有一个按钮。用户可以将该按钮拖放到画布中的任何位置。但是,如果用户试图将该按钮拖出画布边界,则该按钮应粘贴在画布边界中


如何实现这一点?

您应该捕获目标控件上的MouseDown事件,然后订阅MouseMove事件。在MouseMove处理程序中,您应该获得画布和控件的矩形(在相同的坐标空间中),并使用
containsRect()
方法(文档是)确定控件是否仍在画布中。如果它出去了,你不应该移动它


别忘了在MouseUp上取消您的MouseMove活动

startDrag()的签名是
公共函数startDrag(lockCenter:Boolean=false,bounds:Rectangle=null):void


第二个参数允许您传递一个
矩形
,作为
显示对象
的边界。它不会被拖出这个范围

我正在使用DragManager.doDrag进行拖放。我正在考虑为画布添加一个dragExit事件处理程序。当被拖出的对象移出画布时,将触发dragExit。在事件处理程序中,我必须做一些“事情”来防止拖拽。这是我无法理解的“事情”。我想@divillysausages的答案将解决您的问题。我使用DragManager进行拖动,因为我需要代理图像,并且在拖动时需要携带一些数据。使用startDrag()我无法实现这两个目标,除非我为此编写代码。使用DragManager.doDrag?Hm时有没有修复拖动边界的解决方案,我没有在Flex中使用
DragManager
,但快速查看它似乎不允许边界,这很糟糕。在这种情况下,我要么自己重写功能,以允许使用图像和数据
startDrag()
,要么使用反馈来指示您超出了范围。例如,当你表现良好时,用绿色突出画布,当你超出边界时,用红色突出画布。嗯,我认为将dragproxy和dragSource添加到startDrag会增加额外的开销。需要找到其他方法。:)关于突出显示画布,这不是我真正想要给用户的反馈。控件在画布本身内,因此我真正想要的是用户被限制在画布区域内的控件周围移动