Вот как я это решил.
Итак, у меня есть тема:
SkinForX.mxml
А потом у меня есть приложение:
App.mxml
defaults.css
view
ComponentX.mxml
В моем SkinForX.mxml мой HostComponent не является ФАКТИЧЕСКИМ компонентом, а компонентом Spark, на котором он основан, который в моем случае был SkinnableComponent:
<fx:Metadata>
[HostComponent("spark.components.supportClasses.SkinnableComponent")]
</fx:Metadata>
Затем я делаю скин, как обычно, с любыми стилями и эффектами, которые я хочу.
В моем App.mxml я могу включить файл css, но так как он называется defaults.css, мне не нужно (автоматически вставляется). Внутри defaults.css я прикрепляю скин темы к ComponentX:
@namespace view "view.*";
view|ComponentX
{
skin-class:ClassReference("SkinForX");
}
Чтобы убедиться, что обложка темы совместима с тем, что вам нужно делать с ComponentX, вы используете нотацию SkinPart, чтобы указать, что определенные, напечатанные элементы должны быть в обложке. Например:
[SkinPart(required="true")]
public var input:Label;
И это все. Тем не менее вы можете поменять темы, если названия тем оформления совпадают. В противном случае вам придется поменять имена в файле CSS.
Это решение не такое чистое, как возможность привязывать объекты к их оболочкам в рамках темы, но я не думаю, что это все равно возможно.