Apache flex 如何在Flex中使面板可拖动

Apache flex 如何在Flex中使面板可拖动,apache-flex,panel,Apache Flex,Panel,我给我的用户创建项目的能力。“创建项目”对话框,例如: <s:Panel id="postitNoteCreatePanel" horizontalCenter="0" verticalCenter="0" ... 您可以尝试: 将鼠标下键和鼠标上键eventlistner添加到面板的标题栏,并添加两个功能: private function handleDown(event:MouseEvent):void{

我给我的用户创建项目的能力。“创建项目”对话框,例如:

    <s:Panel id="postitNoteCreatePanel" 
             horizontalCenter="0" verticalCenter="0"
             ...
您可以尝试:

将鼠标下键和鼠标上键eventlistner添加到面板的标题栏,并添加两个功能:

    private function handleDown(event:MouseEvent):void{
        this.startDrag();
    }

    private function handleUp(event:MouseEvent):void{
        this.stopDrag();
    }

“this”指的是面板中的“this”。

您可以向面板添加事件侦听器,即在mousedown上,您可以使面板的startDrag属性为true;在mouseup上(在mousedown之后),您可以停止拖动面板


这是最简单的方法。虽然这意味着用户可以使用面板的任何部分拖动面板。

我认为最简单的方法是用s:TitleWindow替换s:panel。TitleWindow蒙皮向标题栏添加了一个区域,允许对其进行拖动,TitleWindow类具有处理拖动的代码。这将允许拖动,而无需编写任何处理程序。希望能有所帮助。

这里是可拖动(和可调整大小)flex面板的示例和代码,不过是旧SDK


代码可以帮助您。我在Flex4.5中使用此代码。它工作得很好



如果面板上有可单击的项目作为子项,您是否会使用“停止立即传播”来停止意外移动面板,即只有标题部分会触发移动?只有标题部分会被拖动,面板本身不会有任何影响。一个区别是TitleWindow始终位于应用程序的顶层,因此在切换状态(或视图)时它仍然存在。但是,可拖动面板可以保持在一种状态(或视图),并且在您返回该状态时仍然存在。


package components
{
        import flash.events.MouseEvent;

        import mx.managers.DragManager;

        import spark.components.Group;
        import spark.components.Panel;

        /**
         * A simple extension of the Spark Panel component
         * that enables dragging.
         */
        public class DraggablePanel extends Panel
        {
                //--------------------------------------
                // Constructor
                //--------------------------------------

                public function DraggablePanel()
                {
                        super();
                }

                //--------------------------------------
                // Skin Parts
                //--------------------------------------

                /**
                 * The skin part that represents the title bar of the underlying Panel.
                 *      NOTE: The default PanelSkin already has this, it's just not defined as a skinPart in the Panel class.
                 * We want it so that we can capture dragging.
                 */
                [SkinPart(required="true")]
                public var topGroup:Group;

                //--------------------------------------
                // Overridden Methods
                //--------------------------------------

                protected override function partAdded( partName:String, instance:Object ) : void
                {
                        super.partAdded( partName, instance );

                        if (instance == topGroup)
                        {
                                Group( instance ).addEventListener( MouseEvent.MOUSE_DOWN, topGroup_mouseDownHandler );
                                Group( instance ).addEventListener( MouseEvent.MOUSE_UP, topGroup_mouseUpHandler );
                        }
                }

                protected override function partRemoved( partName:String, instance:Object ) : void
                {
                        super.partRemoved( partName, instance );

                        if (instance == topGroup)
                        {
                                Group( instance ).removeEventListener( MouseEvent.MOUSE_DOWN, topGroup_mouseDownHandler );
                                Group( instance ).removeEventListener( MouseEvent.MOUSE_UP, topGroup_mouseUpHandler );
                        }
                }

                //--------------------------------------
                // Event Handlers
                //--------------------------------------

                protected function topGroup_mouseDownHandler( event:MouseEvent ):void
                {
                        if ( !DragManager.isDragging )
                                startDrag();
                }

                protected function topGroup_mouseUpHandler( event:MouseEvent ):void
                {
                        stopDrag();
                }
        }
}