有没有办法在 'editable' 属性设置为 false 的情况下更改 flex 程序中所有 textinput 和 textarea 组件的样式(背景颜色)?
谢谢
有没有办法在 'editable' 属性设置为 false 的情况下更改 flex 程序中所有 textinput 和 textarea 组件的样式(背景颜色)?
谢谢
由于对此没有特定的样式,因此您必须创建自定义皮肤。只需按照以下步骤操作:
spark.skins.spark.TextInputSkin
到新类中。updateDisplayList()
方法并根据宿主组件的editable
属性对皮肤的类应用必要的更改。例如:.
override protected function updateDisplayList(
unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
//when editable the background will be red and otherwise it'll be blue
background.color = hostComponent.editable ? 0xff0000 : 0x0000ff;
}
.
@namespace s "library://ns.adobe.com/flex/spark";
s|TextInput {
skinClass: ClassReference("my.skins.MyTextInputSkin");
}
您可以通过执行以下操作使其更通用。
在 updateDisplayList() 方法中:
override protected function updateDisplayList(
unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
var bgColorStyle:String = "backgroundColor";
if (!hostComponent.editable) = "nonEditableBackgroundColor";
background.color = getStyle(bgColorStyle);
}
在 CSS 中:
@namespace s "library://ns.adobe.com/flex/spark";
s|TextInput {
skinClass: ClassReference("my.skins.MyTextInputSkin");
backGroundColor: #ff0000;
nonEditableBackgroundColor: #0000ff;
}
这样,您可以在任何地方重复使用自定义皮肤并通过样式应用不同的颜色。
请注意,您将无法nonEditableBackgroundColor
通过 MXML 进行设置,因为主机组件没有在其元数据中声明该样式。这不适用于backGroundColor
因为它是默认样式并且在 TextInput 的元数据中声明。