Скины гибких кнопок возвращаются к значениям по умолчанию

У меня проблема, связанная с тем, что кнопки со скинами возвращаются к своим скинам по умолчанию после определенных действий в моем приложении. Ниже я привел частичный снимок экрана, на котором вы можете увидеть проблему.

введите описание изображения здесь

Левая кнопка возвращается к своей обложке по умолчанию после того, как она была нажата (щелчок запускает переход состояния). Правая кнопка - это кнопка со скиной по умолчанию. Обратите внимание, что моя мышь не наведена и не нажимает левую кнопку.

Код для оболочки Button выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>

<fx:Metadata>
    <![CDATA[ 
        [HostComponent("spark.components.Button")]
    ]]>
</fx:Metadata>

<fx:Script fb:purpose="styling">
    <![CDATA[         
        import spark.components.Group;

        static private const exclusions:Array = ["labelDisplay"];

        override public function get colorizeExclusions():Array {return exclusions;}

        override protected function initializationComplete():void
        {
            useChromeColor = true;
            super.initializationComplete();
        }            
    ]]>        
</fx:Script>

<s:states>
    <s:State name="up" />
    <s:State name="over" />
    <s:State name="down" />
    <s:State name="disabled" />
</s:states>

<s:Rect id="fill" left="1" right="1" top="1" bottom="1" radiusX="2">
    <s:fill>
        <s:LinearGradient rotation="270">
            <s:GradientEntry color.down="#545454"
                             color.over="#444444"
                             color="#343434"
                             alpha="0.95"/>
            <s:GradientEntry color.down="#767676"
                             color.over="#666666"
                             color="#565656"
                             alpha="0.95"/>
        </s:LinearGradient>
    </s:fill>
</s:Rect>

<s:Rect id="border" left="0" right="0" top="0" bottom="0" width="69" height="20" radiusX="3">
    <s:stroke>
        <s:SolidColorStroke id="borderStroke" weight="1" color="#343434" caps="round" joints="round" />
    </s:stroke>
</s:Rect>

<s:Label id="labelDisplay"
         textAlign="center" verticalAlign="middle" maxDisplayedLines="1" fontSize="12"
         left="10" right="10" verticalCenter="0"
         color="#FFFFFF" fontFamily="SegoeUI">
</s:Label>

Вот код перехода, вызывающего проблему:

        <s:Transition fromState="State0" toState="State1">
        <s:Sequence targets="{[contacts_nocontacts, contacts_list, button_contacts, button_add, button_delete, ac_vgroup]}">
            <s:Parallel>
                <s:Fade target="{contacts_nocontacts}" alphaFrom="1" alphaTo="0" duration="200" />
                <s:Fade target="{contacts_list}" alphaFrom="1" alphaTo="0" duration="200" />
                <s:Fade target="{button_add}" alphaFrom="1" alphaTo="0" duration="200" />
                <s:Fade target="{button_delete}" alphaFrom="1" alphaTo="0" duration="200" />
            </s:Parallel>
            <s:RemoveAction targets="{[contacts_nocontacts, contacts_list, button_add, button_delete]}" />
            <s:AddAction targets="{[button_contacts, ac_vgroup]}" />
            <s:Parallel>
                <s:Fade target="{button_contacts}" alphaFrom="0" alphaTo="1" duration="300" />
                <s:Fade target="{ac_vgroup}" alphaFrom="0" alphaTo="1" duration="300" />
            </s:Parallel>
        </s:Sequence>
    </s:Transition>

person Chris Smith    schedule 20.08.2011    source источник
comment
Ctrl + H setStyle("skinClass" может быть?   -  person takteek    schedule 20.08.2011
comment
Я не понимаю, что вы пытаетесь сказать, перефразируйте, пожалуйста.   -  person Chris Smith    schedule 20.08.2011
comment
Я не понимаю, в чем проблема. Вы пытаетесь вернуть кнопку к классу скина по умолчанию; или вы хотите предотвратить это? Как вы создаете кнопки? Как скины ставите? Какой код стоит за вашим кастомным скином? Какие переходы вы используете?   -  person JeffryHouser    schedule 20.08.2011
comment
Я пытаюсь этого не допустить. Кнопки создаются с помощью MXML, а скин применяется глобально с помощью CSS. Я добавил в вопрос код скина. Переходы представляют собой простые переходы MXML Spark Fade на контейнере кнопок. Кнопка вверху (слева) используется для запуска перехода.   -  person Chris Smith    schedule 20.08.2011
comment
В этом скине нет ничего плохого (хотя я не понимаю, почему вы устанавливаете для useChromeColor значение true, если вы его нигде не используете), поэтому ошибка должна быть где-то еще. Что-то должно переназначать скин-класс этой кнопки.   -  person RIAstar    schedule 21.08.2011
comment
Я так и думал, но скины назначаются только через css, а все скины назначаются глобально ...   -  person Chris Smith    schedule 21.08.2011
comment
@ Крис Смит, тогда это что-то отменяет. Есть более одного CSS? Как загружается? и т. д. и т. д.   -  person J_A_X    schedule 22.08.2011
comment
@J_A_X есть только один файл CSS, который загружается через тег fx:Style сразу после тега s:Application.   -  person Chris Smith    schedule 22.08.2011
comment
Помогите нам здесь. Что-то происходит, что меняет таблицу стилей. Мы не можем просто выбрать возможные решения из шляпы ...   -  person J_A_X    schedule 22.08.2011
comment
В процессе исключения я обнаружил, что код для одного перехода вызывает этот эффект на кнопке. Я добавил код перехода в вопрос.   -  person Chris Smith    schedule 22.08.2011


Ответы (2)


Похоже, скин устанавливается на spark.skins.spark.DefaultButtonSkin (не путать с обычным скином Button - spark.skins.spark.ButtonSkin). Это происходит, когда вы устанавливаете подчеркивание = "true" для кнопки или эта кнопка используется в качестве кнопки по умолчанию в форме.

См. В этой ветке пример того, как настроить выделенную оболочку: http://forums.adobe.com/message/3811868

person sshongru    schedule 25.08.2011

Проблема в том, что скин сбрасывается, когда фокус теряется на кнопке, которая установлена ​​как Default button. Это стандартное поведение, быстрое исправление можно найти ниже (это то же решение, что указал Стивен, но его проще разместить на этой странице)

s|Button.emphasized {
    skinClass: ClassReference("MyNewButtonSkin");
}

Просто прикрепите тот же самый скин для кнопки к свойству стиля emphasized вашей кнопки. Лучший способ сделать это быстрее всего - это сделать с помощью приведенного выше CSS. Таким образом, вы можете нацелить сразу все кнопки!

person CGBe    schedule 16.07.2012