0

所以我在 flex 4 中有这个 titledborderbox 和自定义皮肤,我正在开发拖放应用程序,我遇到了一些问题。

  1. 当我在该组件上启动拖放操作时,我可以拖动它的子组件,但不能拖动 titledborderbox 本身,例如:我可以抓住这个框内的标签或按钮,我可以开始拖动它,但这不是所需的功能。我应该能够单击 titledborderbox 上的任意位置并将整个组件及其子组件拖动到新位置。我试过 mouseChildren = false 但这会禁用孩子身上的事件,这是不好的,因为一些孩子是我无论如何都必须能够与之交互的按钮。有没有解决这个问题的方法,如何解决?

  2. 我的 titledborderbox 容器位于 HGroup 中,我希望能够将 titledborderbox 放置在特定位置,例如:如果我有 4 个 titledborderbox 容器并且我开始拖动最后一个容器,那么我希望能够将其放置在该位置1 在 HGroup 容器中,但拖动管理器始终将放置的项目作为组中的最后一个项目,有什么解决方案吗?

我必须使用这个布局,我不能改变到其他布局,我找不到任何像样的例子来说明我想要实现的目标,这可能吗?任何帮助表示赞赏,谢谢。这是我的拖动代码:

private function handleStartDrag( evt:MouseEvent ):void
            {

                // grab the item renderer and relevant data
                var dragItem:IUIComponent = evt.target as IUIComponent;
                var dragSource:DragSource = new DragSource();                               

                dragSource.addData( dragItem, "item" );
                DragManager.doDrag( dragItem, dragSource, evt );
                this.buttonMode = true;

            }

            protected function handleDragEnter( evt:DragEvent ):void
            {
                if( evt.dragSource.hasFormat( "item" ) )
                    DragManager.acceptDragDrop( evt.target as IUIComponent );

            }

            protected function handleDragDrop( evt:DragEvent ):void
            {
                var dragItem:Object = evt.dragSource.dataForFormat( "item" );
                var dragItemOwner:Group = ( dragItem.owner as   Group );
                dragItemOwner.removeElement( dragItem as IVisualElement );
                var targetOwner:Group = ( evt.target as Group );
                targetOwner.addElement( dragItem as IVisualElement );
            }
4

1 回答 1

0

尝试改变

DragManager.acceptDragDrop( evt.target as IUIComponent );

DragManager.acceptDragDrop( evt.currentTarget as IUIComponent );

event.target 是对“引起”事件的对象的引用(可能是框中的图像或文本字段)。event.currentTarget 是对绑定事件侦听器(您的盒子)的对象的引用。

另一种选择可能是将框的 mouseChildren-property 设置为 false,以便它们不会触发 MouseEvents。但这仅在那些孩子永远不会触发 MouseEvent 时才有用。

于 2013-05-04T15:00:05.387 回答