Flex titledborderbox拖放禁用拖动titledborderbox的子项

时间:2013-05-03 11:39:01

标签: actionscript-3 flash flex drag-and-drop flash-builder

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

  1. 当我开始拖放该组件时,我可以拖动它的子项,但不能拖动titledborderbox本身,例如:我可以抓住这个盒子里面的标签或按钮,我可以开始拖动它但这不是一个理想的功能。我应该能够点击titledborderbox上的任意位置并将整个组件与其子项一起拖动到新位置。我已经尝试过mouseChildren = false,但是禁用了子节点上的事件,因为有些子节点是我必须能够进行交互的按钮。有没有解决这个问题,怎么能解决?

  2. 我的titledborderbox容器在HGroup中,我希望能够将titledborderbox放在特定的位置,例如:如果我有4个标题的borderbox容器并且我开始拖动最后一个,那么我希望能够将它放在HGroup容器中的位置1,但是拖动管理器总是将删除的项目作为组中的最后一项放置,是否有任何解决方案?

  3. 我必须使用这种布局,我不能改变到其他布局,我找不到任何我想要实现的体面的例子,是否可能?任何帮助表示感谢,谢谢。这是我的拖动代码:

    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 );
                }
    

1 个答案:

答案 0 :(得分:0)

尝试更改

DragManager.acceptDragDrop( evt.target as IUIComponent );

DragManager.acceptDragDrop( evt.currentTarget as IUIComponent );

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

另一种选择可能是将您的box的mouseChildren属性设置为false,以便它们不会触发MouseEvents。但这只有在孩子不应该发射MouseEvent的情况下才有用。