2013-05-03 69 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時纔有用。