Вам нужно будет применить магию ActionScript, чтобы она заработала.Возможно, оставьте RectangleGraphic и SmallButtonLineSeparatorGraphic такими, как они есть в MXML.Создайте переменные для ButtonTextGraphic и ButtonSymbolGraphic.Я просто продемонстрирую с помощью ButtonTextGraphic образец.Примерно так:
public var buttonTextGraphicClass : Class;
Также есть переменные для экземпляра класса:
public var buttonTextGraphic : Class;
В конструкторе вы можете установить значения класса.Или, если вы застряли с MXML, используйте обработчик события preinitialize:
buttonTextGraphicClass = ButtonTextGraphic;
в createChildren создайте экземпляры и добавьте их:
protected function override createChildren():void{
super.createChildren();
buttonTextGraphic = new buttonTextGraphicClass()
// set other properties
addElement(buttonTextGraphicClass);
}
Наконец, в updateDisplayList ()размер и расположение их элементов, примерно так:
buttonTextGraphic.x = 22
buttonTextGraphic.y = 6
buttonTextGraphic.width = unscaledWidth // or some other value
buttonTextGraphic.height = unscaledHeight // or some value
Таким образом, вы можете использовать один и тот же скин;просто заменив экземпляры класса для ваших изменяющихся активов FXG во время выполнения.
Я предлагаю прочитать на Flex Component LifeCycle .Если у вас есть проблемы Z-Order;вам, возможно, придется переключиться на создание всех потомков скина в ActionScript;или, возможно, использовать метод "addElementAt".
Чтобы приспособиться к различным состояниям в коде ActionScript, вам придется переопределить установленный метод currentState, чтобы вручную изменять наши состояния, такие как изменение свечения или изменение альфа-канала.
Практически все, что я здесь опишу, - это подход к созданию скинов ActionScript.Вы можете воспользоваться некоторыми из существующих мобильных скинов Flex 4.5.Я бы начал с Mobile ButtonSkin.Я думаю, что граница является активом FXG;который реализован с использованием подхода, аналогичного описанному здесь.