Если мы возьмемся скинить стандартный ComboBox (а мы взялись), можно наткнуться на замечательную проблему. Размер кнопки для разворачивания ComboBox не хочет задаваться, т.е. на самом деле он задается, а эффекта - нуль целых, хрен десятых. Если свойство editable выставлено в false, размер кнопки становится равным ширине комбобокса.
Для меня решением стала отрисовка комбобокса с editable = true, но без выставления этого параметра :-)
Итак, в методе updateDisplayList, задаем правильные размеры для кнопки. В методе commitProperties, задаем правильные стили для той же самой кнопки. Стили backgroundBitmap и borderSkin поддерживаются, но почему-то про них документация по Flex умалчивает - открыл и их, чтобы была поддержка автодополнения.
Наверное есть и альтернативный вариант - установка editable в true, с последующей установкой textInput.editable в false.Тем не менее:
[geshi lang=Actionscript ln=n]package visual.gui { import mx.controls.ComboBox; import mx.core.mx_internal; use namespace mx_internal; [Style(name="backgroundBitmap", type="Class", inherit="no")] [Style(name="borderSkin", type="Class", inherit="no")] public final class CoolComboBox extends ComboBox { override protected function commitProperties():void { var e:Boolean = editableChanged; super.commitProperties(); if (e) { downArrowButton.upSkinName = "editableUpSkin"; downArrowButton.overSkinName = "editableOverSkin"; downArrowButton.downSkinName = "editableDownSkin"; downArrowButton.disabledSkinName = "editableDisabledSkin"; } } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); var arrowWidth:Number = getStyle("arrowButtonWidth"); var ww: Number = unscaledWidth - arrowWidth; downArrowButton.x = ww; downArrowButton.width = arrowWidth; downArrowButton.height = unscaledHeight; } } // CoolComboBox } // visual.gui[/geshi]