我有一个名为AdvancedPanel的类,标题中有按钮,它继承PanelSkin类,AdvancedPanelSkin继承PanelSkin类。我在我的AdvancedPanel中有一个列表,当在列表上选择一个项目时,我希望启用一个按钮。
我已经在子皮肤类中设置了在重写的updateDisplayList()中处理启用和禁用功能的功能,但是当我将invalidateDisplayList()调用放到List的changeHandler中时,它不会被调用。下面是我代码的相对部分:
//AdvancedPanelSkin.as
//..
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
addBtn.enabled = _hostComponent_.addButtonEnabled;
removeBtn.enabled = _hostComponent_.removeButtonEnabled;
}
//..和
//form.mxml
//..
<fx:Script>
<![CDATA[
//...
protected function list_changeHandler(event:IndexChangeEvent):void
{
panel.invalidateDisplayList(); // <- It doesn't call updateDisplayList() on AdvancedPanelSkin
}
]]>
</fx:Script>
<components:AdvancedPanel id="panel" addButtonEnabled="true" removeButtonEnabled="{list.selectedIndex != -1}">
<s:List id="list"
//..
change="list_changeHandler(event)"
</s:List>
</components:AdvancedPanel>
//..我错过了什么吗?
提前谢谢。
发布于 2014-08-12 18:40:59
面板的无效显示列表不会导致其外观的显示列表无效。在思想上正确的做法是通过皮肤部件来控制宿主组件的皮肤,而不是从它的皮肤中控制它的成分。因此,添加按钮到您的面板作为皮肤部分,并覆盖updateDisplayList的面板,而不是它的皮肤。
AdvancedPanel.as
[SkinPart]
public var addBtn:Button;
[SkinPart]
public var removeBtn:Button;
override public function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
addBtn.enabled = ...;
removeBtn.enabled = ...;
}https://stackoverflow.com/questions/25269364
复制相似问题