2010-10-15 61 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