我尝试在自定义组件中使用spark.skins.spark.TitleWindowCloseButtonSkin
,并使其看起来与TitleWindow
中的外观类似。只需将其指定为Button的外观类就没问题。我还有一个.css样式应用于影响TitleWindow
中关闭按钮的所有TitleWindow
类。如果我在.css中设置TitleWindow
的铬色,那么关闭按钮外观也会变色以匹配此颜色。我的自定义组件也使用与TitleWindow
相同的样式引用。但是我的自定义组件内的Button实例没有变色。因此,虽然我有蓝色TitleWindow
s蓝色彩色闭合按钮,但我有一个蓝色自定义组件,默认灰色背景关闭按钮(按下按钮,出现灰色背景)。
TitleWindowSkin
和TitleWindowCloseButtonSkin
必须通过着色机制进行某些操作,但我不明白它是什么。我该如何解决这个问题?我需要在自定义组件中使关闭按钮样式与我TitleWindows
中关闭按钮的样式匹配。
以下是问题的图片:
TitleWindow
位于两张照片的左侧。自定义组件位于右侧。
在左侧框架中,您会在向下位置看到TitleWindow
关闭按钮,请注意其下方状态已着色以匹配TitleWindowSkin
的主题。在右侧,您可以看到自定义组件的关闭按钮的向下状态。我不知道如何着色默认灰色以匹配应用于自定义组件的蓝色主题。
我相信有很多方法可以解决这个问题。我正在寻找最“正确”的方式。我不想硬编码颜色,因为后来一个真正的设计师会进来并调整.css。
PS我的自定义组件从spark.components.Group扩展而来。这可能是个问题吗?
我还应该提一下,使用默认spark ButtonSkin
做的普通Button实例似乎在自定义组件中正确设置样式(部分原因是这个问题非常令人沮丧)。
编辑:是的,是的,确实看起来解决方案的第一步是从SkinnableComponent继承而不是Group或UIComponent ......
答案 0 :(得分:1)
在你的TitleWindowSkin中你需要在排除数组中添加“closeButton”,我已经解决了同样的问题。
答案 1 :(得分:0)
<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中更改。
答案 2 :(得分:0)
好的,所以我主要想出了问题。它源于我没有在我的自定义组件上使用适当的皮肤技术这一事实。自定义组件逻辑在它所处的位置很好,但是我需要准备一个单独的外观类,它实际上实例化自定义组件的“部件”(即:子组件)。目前,自定义组件在createChildren()中执行此操作。此外,为了利用着色机制,skin类必须继承自SparkSkin。 TitleWindowCloseButton实例需要是自定义组件的外观类的成员(以及在自定义组件类中具有引用)。除非明确排除,否则SparkSkin将自动对自定义组件的每个子项进行颜色转换(着色)。最后,回到自定义组件中,覆盖partAdded(),当“closeButton”出现时,在那时添加关闭按钮的事件处理程序。感觉非常Cairngorm-ey ...但是我离题了(必须抑制咆哮关于作为“帮助者”类的stoopid)。