TitleWindowSkin, TitleWindowCloseButtonSkin, раскраска: как мне продублировать это поведение в пользовательском компоненте? - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь использовать spark.skins.spark.TitleWindowCloseButtonSkin в пользовательском компоненте и сделать его тематически похожим на то, как он выглядит в TitleWindow.Просто указав его в качестве класса скина для Button, это не проблема.У меня также есть стиль .css, примененный ко всем моим TitleWindow классам, который влияет на кнопки закрытия в TitleWindow.Если я установлю цвет хрома TitleWindow в .css, то обложка кнопки закрытия также будет окрашена в соответствии с этим цветом.Мой пользовательский компонент также использует ту же ссылку на стиль, что и мои TitleWindow s.Но экземпляр Button внутри моего пользовательского компонента не окрашивается.Поэтому, пока у меня есть синие TitleWindow s с закрытыми кнопками синего цвета, у меня есть синий пользовательский компонент с закрытой кнопкой по умолчанию на сером фоне (при нажатии кнопки появляется серый фон).

Должно бытьчто-то происходит с TitleWindowSkin и TitleWindowCloseButtonSkin через механику окраски, но я не понимаю, что это такое.Как мне решить эту проблему?Мне нужно, чтобы стиль кнопки закрытия в моем пользовательском компоненте соответствовал стилю кнопки закрытия в моем TitleWindows.

Вот изображение проблемы: TitleWindow close button on the left, custom on the right

TitleWindow слева на обеих картинках.Пользовательский компонент находится справа.В левом кадре вы видите кнопку закрытия TitleWindow в нижнем положении, обратите внимание, что ее нижнее состояние раскрашено в соответствии с темой TitleWindowSkin.Справа вы видите состояние кнопки закрытия пользовательского компонента.Я не знаю, как раскрасить серый по умолчанию в соответствии с синей темой, примененной к пользовательскому компоненту.

Я уверен, что существует множество способов решить эту проблему.Я ищу самый «правильный» путь.Я не хочу жестко кодировать цвета, потому что позже придет реальный дизайнер и настроит .css.

PS Мой пользовательский компонент происходит от spark.components.Group.Может ли это быть проблемой ???Я должен также упомянуть, что обычные экземпляры Button, использующие искру по умолчанию ButtonSkin do , похоже, должным образом оформлены в пользовательском компоненте (отчасти причина этой проблемы очень печальная).

РЕДАКТИРОВАТЬ: да, да, действительно, похоже, что первым шагом к решению является наследование от SkinnableComponent, а не группы или UIComponent ...

Ответы [ 3 ]

1 голос
/ 25 июля 2011

В вашем TitleWindowSkin вам нужно добавить "closeButton" в массив исключений сверху, я решил ту же проблему с этим.

0 голосов
/ 17 июня 2011

Хорошо, поэтому я в основном выяснил проблему. Это связано с тем, что я не использую правильную технику оформления для своего пользовательского компонента. Логика пользовательского компонента в порядке, но она должна подготовить отдельный класс скина, который фактически создает "части" пользовательского компонента (то есть: подкомпоненты). В настоящее время пользовательский компонент делает это в createChildren (). Кроме того, чтобы воспользоваться преимуществами механизма окраски, класс скинов должен наследоваться от SparkSkin. Экземпляр TitleWindowCloseButton должен быть членом класса обложки пользовательского компонента (а также иметь ссылку в классе пользовательского компонента). SparkSkin будет автоматически преобразовывать цвета (colorize) каждого потомка обложки пользовательского компонента, если это явно не исключено. Наконец, вернитесь в пользовательский компонент, переопределите partAdded () и, когда появится «closeButton», добавьте обработчик события кнопки закрытия в это время. Чувствую себя очень странно ... но я отвлекся (должен подавить желание разглагольствовать о сутулости, которые являются "вспомогательными" классами).

0 голосов
/ 16 июня 2011

хм, это любопытно, так как я не могу найти какую-либо ссылку на цвет хрома или что-либо в скине кнопки закрытия:

<s:Rect left="0" top="0" right="0" bottom="0">
        <s:stroke>
            <s:SolidColorStroke color="0x000000"
                                alpha="0.0"
                                alpha.over="0.7"
                                alpha.down="0.7"
                                weight="1"/>
        </s:stroke>
        <s:fill>
            <s:SolidColor color="0xCCCCCC" alpha="0" alpha.down="0.7" />
        </s:fill>
    </s:Rect>

На вашем месте я бы просто создал скиноснованы на скине кнопки закрытия и имеют ссылку на цвет стиля с помощью getStyle, который можно изменить в CSS.

...