2013-05-03 72 views
0

所以我有这个标题边框在flex4自定义皮肤,我正在拖放应用程序,我遇到了一些问题。Flex标题边框拖放禁用拖动标题边框的孩子

  1. 当我发起组成部分,我能拖它的孩子,但不是titledborderbox本身,例如在拖放:我可以抓住的标签,或按钮,这是这个盒子里面,我可以开始拖动但它不是所需的功能。我应该可以点击标题边框上的任意位置,然后将带有孩子的整个组件拖到新的位置。我已经尝试过mouseChildren = false,但是这会禁用儿童上的事件,这是不好的,因为有些孩子是我必须能够与之交互的按钮。有什么解决方法可以解决这个问题吗?

  2. 我的标题边框容器在HGroup中,我希望能够将标题边框放在特定位置,例如:如果我有4个标题边框容器,并且我开始拖动最后一个容器,那么我希望能够将其放置在HGroup容器的位置1处,但拖放管理器始终将放置的项目放在组中的最后一个项目中,是否有解决方案?

我必须使用这种布局,我不能更改为其他布局,我找不到任何正在尝试实现的例子,甚至有可能吗?任何帮助表示感谢,谢谢。这里是我拖着代码:

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

回答

0

尝试改变

DragManager.acceptDragDrop(evt.target as IUIComponent); 

DragManager.acceptDragDrop(evt.currentTarget as IUIComponent); 

event.target是参考与这些物体 “引起” 事件(可能的图像或您框中的文本框)。 event.currentTarget是绑定事件监听器(您的框)的对象的引用。

另一种选择是将box的mouseChildren属性设置为false,以便它们不触发MouseEvent。但是这只有在这些孩子永远不要触发MouseEvent时才有用。