- 浏览: 137236 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
原文:http://tonykong.blogbus.com/logs/32749610.html
一个问题折腾了我整整一天,要详细记载一下了 。
在制作自定义控件的时候虽能快速的以New -> MXML Component的方式快速完成预期目标,且自己编写的public property、method也能够方便地被容器访问和调用,但是在使用Flex Builder IDE使用component的时候却不能够为自己创建的可视component书写CSS Style,总感觉自己创建的component与官方提供的有差异,因此我就这个问题展开了研究。
Search Help,首先找到的信息是Meta标签是关键。即:
[Style(name="styleProperty", type="dataType", format="formatName", enumeration="option1,option2,option3,option4", inherit="no")]
不过将此代码插入mxml的component会提示,必须为该标签定义Class类,不然无效。
继续Search Help,发现Example中的确是直接写AS Class 文件来创建component。其中要使用这样的方式为自己的component定义css style,还需:
- Override the style Changed() method to detect changes to the property.
- Override updateDisplayList() method to incorporate the style into the component display.
- Define a static initializer to set the default value of the style property.
具体可参考Help中的《Example: Creating style properties 》一文。
对父类方法的重载大致如下:
// Override the styleChanged() method to detect changes in your new style.
override public function styleChanged(styleProp:String):void {
super.styleChanged(styleProp);
// Check to see if style changed. "styleProp" is null if all styles for this component have changed
if (styleProp=="styleProperty"||styleProp == null){
stylePropChanged = true;
invalidateDisplayList();
}
}
// Override updateDisplayList() to update the component
// based on the style setting.
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
// Check to see if style changed.
if(stylePropChanged==true){
// Redraw gradient fill only if style changed.
this.matteColor=getStyle("styleProperty");
stylePropChanged=false;
}
}
这里需要强调的有几点,就是这几点折腾了我整整一天,而且Help里都没提到,Google和Baidu也没有找到相关的讨论,因此不记下来下一次一定忘记:
- “styleProperty” , 即css样式属性的名称务必以这样的方式书写,切莫使用“-”做单词连结,单词的连结可使用首字母大写的方式,切记切记。我看到为官方component 书写css样式的时候经常会遇到“background-color”、“vertical-align”、“border-style”等属性,就误以 为自己也需这样命名css样式属性,结果弄巧成拙。实质上,自己指定的 “styleProperty”会在使用时自动显示为 “style-property”,也就是说编译器能够理解将源代码中的css样式属性名称中的大写字母 翻译提示为“-p”,例如,“#FFFFFF”也会翻译提示为“#f-f-f-f-f-f”。
- “ styleProp == null ”,虽说在方法“ styleChanged ”中,通过监视传入的“styleProp”可以感知 css样式属性是否有变动,不过也请注意HELP里的这句话 "styleProp" is null if all styles for this component have change。这很重要,因为如果得到“null”就认为没有任何属性改变的话,那就大大地错过了应用css属性更改的方法了,null在这里恰恰代表了多个css样式属性被修改。
另外,也请注意 enumeration="option1,option2,option3,option4",这项值可以让IDE为component提供css编写的代码提示,大大方便使用者。
这样,自己写的component也和官方的一样了,无论在属性式css、内联式css、引用式css都可以轻松制定component的样式。对此的研究也有待深入,欢迎对此有研究的朋友来与我讨论。
发表评论
-
Flex从swf中加载资源和类
2013-12-10 09:37 770需要为直播播放器做几个新的样式,想将每个样式的布局XML和 ... -
swf加载swf的一些问题
2013-03-20 17:31 7211,swfParent 加载 swfChild,如果有交互, ... -
NetStream appendBytes 一点经验
2013-03-20 16:25 2619最近在做基于 NetStream ... -
【译】HTML5还需要什么才能击败Flash(part 2)
2012-04-01 17:53 0What else does HTML5 need to ... -
【译】HTML5还需要什么才能击败Flash(part 1)
2012-04-01 16:36 1096What else does HTML5 need to de ... -
AS 函数作用域、函数闭包、限界方法
2012-03-30 10:21 1482作用域链(scope chain): 任何时候函数开始 ... -
在AS3中自定义全局方法
2012-03-29 11:17 984http://en.flash-ripper.com/2007 ... -
Flex Class object(类对象)构成、traits和prototype
2012-03-29 10:59 1574先贴张图: 每个矩形代表一个对象。CA代表class ... -
使用flex sdk3.6的asdoc遇到的问题及解决方法
2012-03-26 10:24 1970想要对一个组件项目导出asdoc。组件的sdk是3.6,但使用 ... -
UIComponent添加Image不显示
2012-03-18 17:32 1020在UIComponent中添加Image组件,图片不显示。 ... -
Flex优化技巧
2012-03-30 09:46 907http://www.jb51.net/article/182 ... -
Flex中多个柱状图和折线图的问题
2012-02-28 17:53 1998做了个柱状图和折线图的混合图表,2根3D的柱子,6根折线,遇到 ... -
AdvancedDatagrid的dataprovider属性
2012-02-22 10:15 852高级dataGrid的dataProvider的set方法里并 ... -
Sprite的宽高设置及Flex组件的混淆
2012-02-02 10:23 1699由于Bitmap和InteractiveObject同级,都继 ... -
Flex SDK3.5 PollingChannel.as 存在内存泄露bug的一种解决方法
2011-12-31 15:32 1309bug见前面的一篇文章: http://xltank.ite ... -
TextInput的ErrorString样式
2011-10-25 13:08 908http://blog.minidx.com/2008/05/ ... -
【转】Flash Player的 mm.cfg文件
2011-10-08 17:17 5331http://jpauclair.net/mm-cfg-sec ... -
Flex trace() 保存路径
2011-10-08 17:11 1098http://help.adobe.com/en_US/fle ... -
给ItemRenderer传参
2011-08-18 17:19 1545给ItemRenderer传递初始参数,可以根据参数灵活生成I ... -
AdvancedDatagrid改变行的颜色
2011-08-16 15:25 1633最早我尝试重写AdvancedDatagrid的drawRow ...
相关推荐
标题中的"(十八)Flex4_自定义ActionScript组件"表明我们即将探讨的是关于Flex4框架中如何创建和使用自定义的ActionScript组件。Flex是一个基于Adobe Flash Player或Adobe AIR运行时的开源框架,用于构建富互联网应用...
Style Explorer允许用户查看和实验Flex组件的各种样式属性,理解如何自定义UI外观,这对于理解和使用Flex的皮肤和样式系统至关重要。 2. **Flex.3.Language.Reference.cn.chm**:这看起来是一个中文版的Flex 3语言...
6. **皮肤和样式**:Flex支持自定义组件的外观,通过皮肤(Skin)和样式(Style)可以改变控件的颜色、边框、阴影等视觉效果。在创建自定义控件时,可以定义自己的皮肤类,提供不同的视觉风格。 7. **性能优化**:...
`windowsXP.css` 文件是CSS(Cascading Style Sheets)样式表,用于定义Flex组件的外观。在Flex中,CSS可以用来控制组件的颜色、字体、边距、布局等属性,实现更细致的定制。此文件包含了Windows XP Skin的样式规则...
6. **Style Sheets (CSS)**:Flex支持使用CSS来定义组件样式。通过源码,你可以学习如何使用CSS来实现颜色、字体、边距等属性的控制。 7. **Event Handling**:源码中可能包含事件监听器,这些监听器响应用户的交互...
在使用这个源码时,开发者可以学习如何创建自定义样式并应用到Flex组件上。源代码中可能包含了以下几个关键部分: 1. **样式类(Style Class)**:定义了各种样式属性,可以是全局样式或特定组件样式。 2. **样式...
2. **使用 `compc` 编译命令**:通过 Adobe Flex SDK 的 `compc` 工具,你可以编译自定义的样式文件为 `.swc` 主题库。这通常需要指定 `-include-file`、`-o`(输出文件名)和 `-include-classes` 参数。 3. **配置...
为了创建一个自定义对话框,我们需要在WXML文件中定义对话框的结构,包括标题、内容、按钮等元素;在WXSS文件中设置相应的样式,确保对话框的布局和视觉效果符合设计要求;最后,在JS文件中编写控制对话框显示与隐藏...
例如,使用`[Component]`元数据标记来声明一个可重用的UI组件,或者使用`[Style]`元数据来定义样式规则。 4. **依赖管理**:确保正确地管理库的依赖关系,如果库依赖于其他库或框架,需要在项目的配置中添加这些...
1. 在对应的样式表(例如:custom-tab-bar.scss)中,为底部导航栏和导航项定义样式。可以设置背景色、字体颜色、选中状态下的样式变化等。 ```scss .tab-bar { position: fixed; bottom: 0; left: 0; right: 0...
在微信小程序开发中,自定义标签栏(TabBar)组件是一项关键功能,它为用户提供了一种直观、便捷的导航方式,使用户能够轻松地在不同的页面间切换。本教程将深入探讨如何在微信小程序中创建并自定义TabBar组件,以...
在Flex中,我们可以使用CSS(Cascading Style Sheets)来定义样式。创建一个CSS文件,例如`styles.css`,并在其中定义一个类,用于设置Datagrid行的背景色。例如,我们可以定义一个名为`highlightedRow`的类: ``...
1. **自定义组件**:微信小程序支持开发者创建自定义组件,通过`<template>`标签定义组件结构,`<script>`处理数据和逻辑,`<style>`定义样式。自定义`switch`组件就是在原生`switch`的基础上扩展,增加文字或图标的...
首先,定义一个名为ShareAlertDialog的组件,该组件继承自React的Component类: ``` export default class ShareAlertDialog extends Component { constructor(props) { super(props); this.state = { isVisible...
DataGridColumn是DataGrid的列定义,它允许我们自定义列的样式、内容和行为。在描述中提到的场景,我们需要根据数据值的不同来改变单元格中文字的颜色,例如,将整数0表示为红色(关闭状态),1表示为绿色(开启状态...
这段代码定义了一个名为`HeaderNoBack`的组件,它继承自`Component`类。在`render`方法中,组件由一个外层`View`(container)和内层`View`(textview)组成,其中内层`View`包含一个`Text`组件来展示标题。`this....
为了实现一个自定义的头部导航栏,我们可以创建一个新的React组件,利用Flexbox布局来定位元素,并使用样式对象来自定义其外观。 首先,我们需要引入必要的库。在React Native中,我们可以使用`react-native-...
在小程序中,可以使用`<custom-component>`标签定义一个自定义组件。 7. **性能优化**:对于大型或复杂布局,需要注意性能问题。例如,减少不必要的重绘和回流,合理使用`wx:if`与`hidden`,以及使用`wx:for`的`...
`name`属性用于标识组件,`props`属性定义了一个名为`timelineList`的属性,它是一个数组,用于存储时间线的各个事件数据。默认情况下,这个数组是空的,可以通过父组件传递实际的数据来填充。 ```javascript ...