2011-01-17 7 views
3

ziehen kann Ich gebe meinen Benutzern die Möglichkeit, Elemente zu erstellen. Die Artikel erstellen Dialoge wie:Wie man Panel in Flex

<s:Panel id="postitNoteCreatePanel" 
      horizontalCenter="0" verticalCenter="0" 
      ... 

Wie kann ich Panel ziehbar, so dass Benutzer sie um die Seite bewegen kann, so dass es nicht andere Gegenstände blockiert

Antwort

7

Sie können versuchen:

hinzufügen Maus nach unten und Maus nach oben eventlistner zum titleBar der Platte und zwei Funktionen hinzufügen:

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

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

„this“ ist es, die die Platte beziehen.

+0

Wenn es klickbare Elemente wie Kinder auf dem Panel, würden Sie Anschlag sofort propogation verwenden, um die Platte zu stoppen accidently dh nur der Titel Teil bewegt wird, auslösen würde ein Schritt? – Ryan

+0

Nur der Titelbereich kann gezogen werden, der Bereich selbst hat keine Auswirkung. – michael

+0

Wow! das war einfach o_0 – grisevg

1

Sie können dem Panel einen Ereignis-Listener hinzufügen, d. H. Bei mousedown können Sie die startDrag -Eigenschaft des Panels auf true setzen, und beim MouseUp (nach MouseDown) können Sie das Panel nicht mehr ziehen.

Dies ist der einfachste Weg, dies zu tun. Dies würde jedoch bedeuten, dass der Benutzer in der Lage sein wird, das Panel mit einem beliebigen Teil des Panels zu ziehen.

+0

machen Sie etwas wie Neeraj

1

Der einfachste Weg, dies zu tun ist meiner Meinung nach, ersetzen Sie Ihr s: Panel mit einem s: TitleWindow. Die TitleWindow-Skin fügt der Titelleiste einen Bereich hinzu, in dem sie gezogen werden kann, und die TitleWindow-Klasse verfügt über Code zum Ziehen. Dadurch können Sie ziehen, ohne dass Sie einen Handler programmieren müssen. Ich hoffe, das hilft.

+0

Ein Unterschied ist das TitleWindow befindet sich immer auf der obersten Ebene der Anwendung, so bleibt es Wenn Sie zwischen Zuständen (oder Ansichten) wechseln, kann ein ziehbares Bedienfeld in einem Zustand (oder in einer Ansicht) verbleiben und ist immer noch vorhanden, wenn Sie in diesen Zustand zurückkehren. – ggkmath

0

Code blies Ihnen helfen können. Ich benutze diesen Code in Flex 4.5. Es funktioniert perfekt.

http://code.google.com/p/force-explorer/source/browse/trunk/Flex/Explorer/src/components/DraggablePanel.as?r=8



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(); 
       } 
     } 
} 


http://code.google.com/p/force-explorer/source/browse/trunk/Flex/Explorer/src/components/DraggablePanel.as?r=8

Verwandte Themen