`

【转】为自定义Flex Component定义Style

    博客分类:
  • Flex
阅读更多

原文: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,还需:

  1. Override the style Changed() method to detect changes to the property.
  2. Override updateDisplayList() method to incorporate the style into the component display.
  3. 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也没有找到相关的讨论,因此不记下来下一次一定忘记:

  1.   “styleProperty” , 即css样式属性的名称务必以这样的方式书写,切莫使用“-”做单词连结,单词的连结可使用首字母大写的方式,切记切记。我看到为官方component 书写css样式的时候经常会遇到“background-color”、“vertical-align”、“border-style”等属性,就误以 为自己也需这样命名css样式属性,结果弄巧成拙。实质上,自己指定的 “styleProperty”会在使用时自动显示为 “style-property”,也就是说编译器能够理解将源代码中的css样式属性名称中的大写字母 翻译提示为“-p”,例如,“#FFFFFF”也会翻译提示为“#f-f-f-f-f-f”。
  2. 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的样式。对此的研究也有待深入,欢迎对此有研究的朋友来与我讨论。

分享到:
评论

相关推荐

    (十八)Flex4_自定义ActionScript组件

    标题中的"(十八)Flex4_自定义ActionScript组件"表明我们即将探讨的是关于Flex4框架中如何创建和使用自定义的ActionScript组件。Flex是一个基于Adobe Flash Player或Adobe AIR运行时的开源框架,用于构建富互联网应用...

    Flex 学习文档必备

    Style Explorer允许用户查看和实验Flex组件的各种样式属性,理解如何自定义UI外观,这对于理解和使用Flex的皮肤和样式系统至关重要。 2. **Flex.3.Language.Reference.cn.chm**:这看起来是一个中文版的Flex 3语言...

    Flex 图片旋转 缩放 拖动 特效

    6. **皮肤和样式**:Flex支持自定义组件的外观,通过皮肤(Skin)和样式(Style)可以改变控件的颜色、边框、阴影等视觉效果。在创建自定义控件时,可以定义自己的皮肤类,提供不同的视觉风格。 7. **性能优化**:...

    flex windowsXP 皮肤

    `windowsXP.css` 文件是CSS(Cascading Style Sheets)样式表,用于定义Flex组件的外观。在Flex中,CSS可以用来控制组件的颜色、字体、边距、布局等属性,实现更细致的定制。此文件包含了Windows XP Skin的样式规则...

    flex主题皮肤源码

    6. **Style Sheets (CSS)**:Flex支持使用CSS来定义组件样式。通过源码,你可以学习如何使用CSS来实现颜色、字体、边距等属性的控制。 7. **Event Handling**:源码中可能包含事件监听器,这些监听器响应用户的交互...

    Flex官方设置样式界面源码

    在使用这个源码时,开发者可以学习如何创建自定义样式并应用到Flex组件上。源代码中可能包含了以下几个关键部分: 1. **样式类(Style Class)**:定义了各种样式属性,可以是全局样式或特定组件样式。 2. **样式...

    Flex 3 基础教程(1).ppt

    2. **使用 `compc` 编译命令**:通过 Adobe Flex SDK 的 `compc` 工具,你可以编译自定义的样式文件为 `.swc` 主题库。这通常需要指定 `-include-file`、`-o`(输出文件名)和 `-include-classes` 参数。 3. **配置...

    微信小程序自定义对话框

    为了创建一个自定义对话框,我们需要在WXML文件中定义对话框的结构,包括标题、内容、按钮等元素;在WXSS文件中设置相应的样式,确保对话框的布局和视觉效果符合设计要求;最后,在JS文件中编写控制对话框显示与隐藏...

    编写标准的flex库项目

    例如,使用`[Component]`元数据标记来声明一个可重用的UI组件,或者使用`[Style]`元数据来定义样式规则。 4. **依赖管理**:确保正确地管理库的依赖关系,如果库依赖于其他库或框架,需要在项目的配置中添加这些...

    uni-app-小程序自定义底部菜单样式示例

    1. 在对应的样式表(例如:custom-tab-bar.scss)中,为底部导航栏和导航项定义样式。可以设置背景色、字体颜色、选中状态下的样式变化等。 ```scss .tab-bar { position: fixed; bottom: 0; left: 0; right: 0...

    微信小程序自定义标签栏(TabBar) 组件.zip

    在微信小程序开发中,自定义标签栏(TabBar)组件是一项关键功能,它为用户提供了一种直观、便捷的导航方式,使用户能够轻松地在不同的页面间切换。本教程将深入探讨如何在微信小程序中创建并自定义TabBar组件,以...

    datagrid行的背景色

    在Flex中,我们可以使用CSS(Cascading Style Sheets)来定义样式。创建一个CSS文件,例如`styles.css`,并在其中定义一个类,用于设置Datagrid行的背景色。例如,我们可以定义一个名为`highlightedRow`的类: ``...

    switch.rar

    1. **自定义组件**:微信小程序支持开发者创建自定义组件,通过`<template>`标签定义组件结构,`<script>`处理数据和逻辑,`<style>`定义样式。自定义`switch`组件就是在原生`switch`的基础上扩展,增加文字或图标的...

    React Native使用Modal自定义分享界面的示例代码

    首先,定义一个名为ShareAlertDialog的组件,该组件继承自React的Component类: ``` export default class ShareAlertDialog extends Component { constructor(props) { super(props); this.state = { isVisible...

    Flex DataGrid DataGridColumn数据颜色多样化-类型替换

    DataGridColumn是DataGrid的列定义,它允许我们自定义列的样式、内容和行为。在描述中提到的场景,我们需要根据数据值的不同来改变单元格中文字的颜色,例如,将整数0表示为红色(关闭状态),1表示为绿色(开启状态...

    React Native自定义标题栏组件的实现方法

    这段代码定义了一个名为`HeaderNoBack`的组件,它继承自`Component`类。在`render`方法中,组件由一个外层`View`(container)和内层`View`(textview)组成,其中内层`View`包含一个`Text`组件来展示标题。`this....

    React Native之头部导航组件

    为了实现一个自定义的头部导航栏,我们可以创建一个新的React组件,利用Flexbox布局来定位元素,并使用样式对象来自定义其外观。 首先,我们需要引入必要的库。在React Native中,我们可以使用`react-native-...

    小程序源码 动态交叉布局demo.zip

    在小程序中,可以使用`<custom-component>`标签定义一个自定义组件。 7. **性能优化**:对于大型或复杂布局,需要注意性能问题。例如,减少不必要的重绘和回流,合理使用`wx:if`与`hidden`,以及使用`wx:for`的`...

    【JavaScript源代码】vue时间线组件的使用方法.docx

    `name`属性用于标识组件,`props`属性定义了一个名为`timelineList`的属性,它是一个数组,用于存储时间线的各个事件数据。默认情况下,这个数组是空的,可以通过父组件传递实际的数据来填充。 ```javascript ...

Global site tag (gtag.js) - Google Analytics