2010-10-15 75 views
0

我正在做一個ItemRenderer的拖放手動(DataGrid),並且想知道如何生成未添加到顯示的組件的自定義DragProxy名單。Flex 4使用自定義DragProxy拖放

我想是這樣的,但沒有奏效:

private function doDrag(event:MouseEvent):void 
    { 
    var dragSource:DragSource = new DragSource(); 
    dragSource.addData(data, 'dnd_format'); 

    //var bm:Bitmap = new Bitmap(ImageSnapshot.captureBitmapData(this)); 
    var btn:Button = new Button(); 
    btn.label = 'New Button'; 
    var bm:Bitmap = new Bitmap(ImageSnapshot.captureBitmapData(btn)); 

    var dragProxy:Image = new Image(); 
    dragProxy.source = bm; 
    DragManager.doDrag(this, dragSource, event, dragProxy,0,0, 0.6); 
    } 

所以,我希望能夠用一個組件來創建DragProxy,按鈕就是一個例子。 任何想法?

回答

1

我的猜測是,這是行不通的,因爲你試圖從一個剛剛創建並沒有被添加到舞臺的組件獲取位圖。我會嘗試使用嵌入式圖像作爲拖拽代理首先測試此代碼。如果可行,那麼嘗試從舞臺上存在的組件獲取位圖。我的猜測是這兩種情況都會起作用。

+0

yeap,兩種情況下工作。我如何拍攝尚未添加到顯示列表的組件的快照? – oscarm 2010-10-15 18:38:01

+0

我不認爲你能做到這一點,因爲組件直到組件生命週期的後期才抽出。換句話說,你無法從沒有機會添加到顯示列表的組件中獲取位圖並首先繪製自己。如果新組件是您實際想要添加到顯示列表的組件,則可以使用callLater方法來獲取您的快照。該方法將一個指定的方法調用添加到事件隊列的末尾,讓您的新組件有機會在您爲代理獲取位圖之前自行設置並繪製自己。希望有所幫助。 – 2010-10-15 19:29:18

+0

謝謝。我認爲這與Fex用於印刷的東西類似。它將組件加載到不可見容器中以生成快照... – oscarm 2010-10-16 18:22:51