Flash 如何在Flex4中创建拖放面板?

Flash 如何在Flex4中创建拖放面板?,flash,apache-flex,drag-and-drop,Flash,Apache Flex,Drag And Drop,我试图拖动一个组件,我想让它创建一个面板。这是我的动作脚本,但它似乎不起作用,你知道为什么吗 private function dragDrop(e:DragEvent): void { var userPanel:Panel = new Panel(); userPanel.width = 100; userPanel.height = 100; userPanel.x = 10; userPanel.y = 10; userPanel.visi

我试图拖动一个组件,我想让它创建一个面板。这是我的动作脚本,但它似乎不起作用,你知道为什么吗

private function dragDrop(e:DragEvent): void {
    var userPanel:Panel = new Panel();
    userPanel.width = 100;
    userPanel.height = 100;
    userPanel.x = 10;
    userPanel.y = 10;
    userPanel.visible = true;
    addChild(userPanel);
}

酷,让它工作了。。。因此,我缺少的步骤是接受dragEnter事件上的拖动。以下是完整代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.core.IUIComponent;
            import mx.events.DragEvent;
            import mx.managers.DragManager;

            import spark.components.Panel;
            private function dragDrop(e:DragEvent): void {
                var userPanel:Panel = new Panel();
                userPanel.width = 100;
                userPanel.height = 100;
                userPanel.x = 10;
                userPanel.y = 10;
                userPanel.visible = true;
                addElement(userPanel);
            }


            protected function canvas1_dragEnterHandler(event:DragEvent):void
            {
                // TODO Auto-generated method stub
                DragManager.acceptDragDrop(event.currentTarget as IUIComponent);
            }

        ]]>
    </fx:Script>
    <mx:Canvas dragEnter="canvas1_dragEnterHandler(event)" dragDrop="dragDrop(event)" width="100%" height="100%" backgroundColor="blue"/>
    <s:List dataProvider="{new ArrayCollection(['a','item','in','here'])}" dragEnabled="true"/>
</s:Application>


Shaun

您包含的代码是有效的。拖动启动器配置是否正确?拖放目标是否配置为接受拖放

下面是一些代码,当canvas2被拖入canvas1时,这些代码将向canvas1添加一个面板:

protected function canvas2_dragStartHandler(event:MouseEvent):void {
    var dragInitiator:Canvas=Canvas(event.currentTarget);
    var ds:DragSource = new DragSource();              

    DragManager.doDrag(dragInitiator, ds, event);
}

protected function canvas1_dragEnterHandler(event:DragEvent):void {
    DragManager.acceptDragDrop(Canvas(event.currentTarget));
}

protected function canvas1_dragDropHandler(event:DragEvent):void {
    var userPanel:Panel = new Panel();
    userPanel.width = 100;
    userPanel.height = 100;
    userPanel.x = 10;
    userPanel.y = 10;
    userPanel.visible = true;
    Canvas(event.currentTarget).addChild(userPanel);
}

需要更详细的信息它似乎不工作意味着什么,它是否在代码中遇到断点,代码注册到哪个侦听器?这将创建一个新的面板,如果使用Flex 3的一些风格运行,如果4您需要使用addElement,但我相信这是一个编译时错误。很抱歉,“它不工作”,我的意思是它没有添加(至少显示)新创建的面板。我会尝试一下addElement。没问题,只是一个仓促的问题。我确定,我没有注意到你的问题标题中有flex 4,希望addElement适合你(还要注意的是,很多样式在4中被去掉了,所以你可能需要在面板上设置背景色或类似于userPanel.graphics.Beginll(0xff0000)的东西);userPanel.graphics.drawRect(0,0,20,20);只是为了确保你看到了一些东西。在draw矩形或addElement上没有运气。:XOops。我想我应该在发布我的答案之前刷新一下。看起来你已经找到了答案。呃,无论你的答案是正确的还是做得好,你也得到了一颗金星:)