【问题标题】:Flex 3: Rounded Menu with a PopUpButtonFlex 3:带有 PopUpButton 的圆形菜单
【发布时间】:2009-09-10 23:48:43
【问题描述】:

所以我有一个 PopupButton,当我单击该按钮时,我希望弹出的菜单具有圆角。我该怎么做呢?

更新: 我发现了一个类似于我想做的更新,可以在以下页面找到:

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

谁能帮我解决我所缺少的...我不确定我是否需要重写任何菜单类函数。

当我加载我的示例时:

addEventListener("menuShow", onMenuShow);

会触发,但是当我单击 PopUpButton 以显示菜单时,onMenuShow 函数不会被触发,并且常规菜单正在显示而没有圆角。

对此的任何帮助表示赞赏。

谢谢

【问题讨论】:

    标签: apache-flex flex3


    【解决方案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>
    

    如果您碰巧有更好的解决方案,请发表评论。

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 2017-08-17
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多