2009-09-10 3 views
1

그래서 PopupButton이 있고 단추를 클릭하면 둥근 모서리가 튀어 나오는 팝업 메뉴가 나타납니다. 이 일을 어떻게 하죠?Flex 3 : PopUpButton이있는 둥근 메뉴

UPDATE :

http://blog.flexmonkeypatches.com/2007/10/08/flex-rounded-menues-using-masking/comment-page-1/

유일한 차이점은 내가 가진 메뉴를 보여주는거야 있다는 것입니다 : 나는 내가하고 싶은 것과 비슷한 업데이 트를 발견 , 그것은 다음 페이지에서 확인하실 수 있습니다 PopUpButton. 지금까지 내가 내 사용자 지정 메뉴를 위해 무엇을 가지고 :

package { 

    import flash.display.Sprite; 

    import mx.controls.Menu; 
    import mx.events.MenuEvent; 

    public class MyMenu extends Menu { 

     public function MyMenu() { 
      super(); 
      addEventListener("menuShow", onMenuShow); 
     } 

     private function onMenuShow(e:MenuEvent):void { 
      callLater(maskRoundedCorners,[e]); 
     } 


    private function maskRoundedCorners(e:MenuEvent):void { 

       var menu:Menu = e.menu as Menu; 
       menu.cacheAsBitmap=false; 

       if (!menu.mask){ 
        var maskx:uint = menu.x; 
        var masky:uint = menu.y; 
        var maskw:uint = menu.getExplicitOrMeasuredWidth(); 
        var maskh:uint = menu.getExplicitOrMeasuredHeight(); 
        var rad:int = menu.getStyle("cornerRadius") * 2; 

        var roundRect:Sprite = new Sprite(); 
        roundRect.graphics.beginFill(0xFFFFFF); 
        roundRect.graphics.drawRoundRect(maskx,masky,maskw,maskh,rad); 
        roundRect.graphics.endFill(); 
        menu.mask = roundRect; 
      } 
     } 
    } 
} 

사람이 내가 부족 어떻게 좀 도와 수 ... 나는 메뉴 클래스 함수를 오버라이드 (override) 할 필요가 있는지 확실하지 않습니다.

내 예로드

:

하여 addEventListener ("에 menuShow"를 onMenuShow);

이 발생하지만 popUpButton을 클릭하여 메뉴를 표시하면 onMenuShow 함수가 실행되지 않고 일반 메뉴가 둥근 모서리가 표시됩니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

고맙습니다.

답변

1

마지막으로 알아 냈습니다. 여기에 내가 생각해 낸 해결책이 있습니다.

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.controls.Menu; 

      [Bindable] 
      private var myMenu:Menu; 

      private function popUpButtonInit():void { 
       myMenu = new Menu(); 
       myMenu.dataProvider = arr; 

      } 

      private function menuOpenHandler():void { 
        var maskx:uint = myMenu.x; 
        var masky:uint = myMenu.y - 1; 
        var maskw:uint = myMenu.getExplicitOrMeasuredWidth(); 
        var maskh:uint = myMenu.getExplicitOrMeasuredHeight(); 
        var rad:int = myMenu.getStyle("cornerRadius"); 

        var roundRect:Sprite = new Sprite(); 
        roundRect.graphics.beginFill(0xFFFFFF); 
        roundRect.graphics.drawRoundRect(maskx, masky, maskw, maskh, rad); 
        roundRect.graphics.endFill(); 
        myMenu.mask = roundRect; 

      }   


     ]]> 
    </mx:Script> 

    <mx:Style> 
     Menu { 
      corner-radius: 30; 
     } 
    </mx:Style> 

    <mx:Array id="arr"> 
     <mx:Object label="Alert" /> 
     <mx:Object label="Button" /> 
     <mx:Object label="ButtonBar" /> 
     <mx:Object label="CheckBox" /> 
     <mx:Object label="ColorPicker" /> 
     <mx:Object label="ComboBox" /> 
    </mx:Array> 

    <mx:PopUpButton width="78" height="25" 
        initialize="popUpButtonInit();" 
        popUp="{myMenu}" popUpGap="3" open="menuOpenHandler();" 
        horizontalCenter="0" verticalCenter="0"> 
    </mx:PopUpButton> 

</mx:Application> 

더 나은 해결책이있는 경우 의견을 말하십시오.