I've tried another code and still get the error when I click the menu: TypeError: Error #1034: Type Coercion failed: cannot convert myrende...@47410a1 to mx.controls.menuClasses.IMenuItemRenderer. at mx.controls::Menu/http://www.adobe.com/2006/flex/mx/internal::deleteDependentSubMenus()[C:\autobuild\3.5.0\frameworks\projects\framework\src\mx\controls\Menu.as:2275] at mx.controls::Menu/http://www.adobe.com/2006/flex/mx/internal::hideAllMenus()[C:\autobuild\3.5.0\frameworks\projects\framework\src\mx\controls\Menu.as:2289] at mx.controls::Menu/mouseUpHandler()[C:\autobuild\3.5.0\frameworks\projects\framework\src\mx\controls\Menu.as:1706]
In my code I do implement all 5 methods listed at the http://livedocs.adobe.com/flex/3/langref/mx/controls/menuClasses/IMenuItemRenderer.html so I'm not sure, what is missing here? MyRenderer.mxml: <?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" alpha="0.4" width="100%" height="100%"> <mx:Script> <![CDATA[ import mx.events.*; import mx.controls.*; [Bindable] private var color:uint; override public function set data(value:Object):void { if(value != null) { super.data = value; lb.text = String(value.label); color = (lb.text.indexOf('♥') != -1 || lb.text.indexOf('♦') != -1) ? 0xFF0000 : 0x000000; } dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE)); } // Internal variable for the property value. private var _menu:Menu; public function get menu():Menu { return _menu; } public function set menu(value:Menu):void { _menu = value; } public function get measuredBranchIconWidth():Number { return 50;} public function get measuredTypeIconWidth ():Number { return 50;} public function get measuredIconWidth ():Number { return 50;} ]]> </mx:Script> <mx:Label id="lb" color="{color}" /> </mx:Canvas> Test.mxml: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationPolicy="all"> <mx:Style> @font-face { src:url("C:\\WINDOWS\\Fonts\\times.ttf"); fontFamily: myFont; /* card suits */ unicodeRange: U+2660-U+266B; } Menu, Label { fontFamily: myFont; fontSize: 24; } </mx:Style> <mx:Script> <![CDATA[ import mx.controls.*; private function createMenu():void { var bids:Array = [{label: "Pass"}]; for (var i:uint = 7; i <= 10; i++) for (var j:uint = 0; j < 4; j++) bids.unshift({label: i+"♠♣♦♥".charAt(j%4)}); var menu:Menu = new Menu(); menu.dataProvider = bids; menu.itemRenderer = new ClassFactory(MyRenderer); menu.selectedIndex = 0; pub.popUp = menu; } ]]> </mx:Script> <mx:Canvas width="100%" height="100%"> </mx:Canvas> <mx:ApplicationControlBar width="100%"> <mx:Spacer width="100%"/> <mx:PopUpButton id="pub" creationComplete="createMenu();"/> </mx:ApplicationControlBar> </mx:Application>