Вы не должны устанавливать currentState
Скина непосредственно из Скина, потому что hostComponent
должен позаботиться об этом.Когда вы деактивируете и повторно активируете Window, hostComponent вернет состояние Skin в одно из своих первоначальных состояний (например, normal
) и, следовательно, не учитывает ваши два пользовательских состояния.
Если вы хотите установитьСостояние скина, основанное на определенных условиях, вы должны переопределить getCurrentSkinState () метод hostComponent.Но в данном конкретном случае я не думаю, что это был бы правильный подход, потому что он был бы слишком сложным.
Самое простое решение здесь, я думаю, было бы переопределить метод Skin updateDisplayList()
для позиционирования ваших элементов.,Это метод, который заботится о правильном отображении всех элементов в вашем скине.
<fx:Script>
<![CDATA[
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (NativeApplication.supportsDockIcon) {
titleDisplay.left = width / 2;
//position other elements for mac
}
else {
titleDisplay.left = 60;
//position other elements for win
}
}
]]>
</fx:Script>
Другой, возможно, даже лучший, подход заключается в создании двух отдельных скинов (один для Mac, один для Windows) ипримените правильный скин для Windows.Это избавило бы нас от непрерывной проверки возможностей.