То, что вы называете «сквозными» стилями, на самом деле называется наследующими стилями. Решение вашего вопроса на самом деле довольно просто.
Вы используете метаданные стиля в своем пользовательском компоненте, чтобы объявить, что у ButtonPanel есть стилевое имя с именем 'buttonStyleName':
[Style(name="buttonStyleName", inherit="yes")]
public class ButtonPanel extends Panel {
....
}
Обратите внимание на флаг «наследовать», установленный в значение «истина»: это гарантирует, что любой компонент в вашей пользовательской панели, имеющий тот же стиль, унаследует значение, которое вы дали этому стилю на уровне панели. *
Установка этих метаданных обеспечит, чтобы FlashBuilder предлагал buttonStyleName как стиль, а не как свойство (как это было бы с решением Сэма).
Редактировать : уже определенные стили
Сначала я не осознавал, что вы имеете в виду mx ButtonBar (как это явно не упоминается). Причина, по которой это не работает для вас, состоит в том, что mx: ButtonBar уже определил эти стили как не наследуемые. Посмотрите на исходный код:
[Style(name="firstButtonStyleName", type="String", inherit="no")]
[Style(name="buttonStyleName", type="String", inherit="no")]
[Style(name="lastButtonStyleName", type="String", inherit="no")]
Из-за этого компилятор будет жаловаться, когда вы пытаетесь переопределить это определение в своей пользовательской панели, потому что он просто не знает, какую из противоречивых инструкций выбрать. Поэтому нам придется проделать немного больше работы, если вы хотите придерживаться mx: ButtonBar.
Сначала определите стили на ButtonPanel в точности так, как они определены в mx: ButtonBar, чтобы они имели одинаковую подпись (вы можете просто скопировать / вставить три строки выше). Это закроет компилятор, но стили больше не будут наследоваться, верно?
Поэтому нам придется передать их вручную: в вашей пользовательской обложке Panel переопределите метод updateDisplayList()
и - при условии, что идентификатор ButtonBar равен 'buttonBar' - добавьте следующее:
private const buttonStyles:Array = [
"firstButtonStyleName",
"buttonStyleName",
"lastButtonStyleName"
];
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
if (buttonBar)
for each (var buttonStyle:String in buttonStyles)
buttonBar.setStyle(buttonStyle, getStyle(buttonStyle));
//some other code
super.updateDisplayList(unscaledWidth, unscaledHeight);
}
Это будет принимать стили с панели хоста и передавать их на панель кнопок.