<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不用Cell Renderer如何在ComboBox里加入自定義ICO

     

          FLEX 2005-7-27 15:59
    //轉自:http://www.richinternetapps.com/index.html

    My first thought was to suggest the creation of a custom cell renderer, an example of which ships with Flex. However, I then remembered that the List control in Flex has an iconField property, which can be used to specify an image that will appear next to each item in the control. An example MXML file using the iconField property with the List control is as follows:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" >

    <mx:Script>
    [Embed(source="one.png")]
    var iconSymbol1:String;
    [Embed(source="two.png")]
    var iconSymbol2:String;
    [Embed(source="three.png")]
    var iconSymbol3:String;
    </mx:Script>

    <mx:List iconField="icon" >
    <mx:dataProvider>
    <mx:Array>
    <mx:Object label="One" icon="{ iconSymbol1 }" />
    <mx:Object label="Two" icon="{ iconSymbol2 }" />
    <mx:Object label="Three" icon="{ iconSymbol3 }" />
    </mx:Array>
    </mx:dataProvider>
    </mx:List>

    </mx:Application>

    The above MXML uses the iconField property of the List control to retrieve the icon property from each item in the control's data provider, and produces the following List control (image only):



    圖片如下:


    But (and isn't there always a but?), the poster to FlexCoders wanted the icons not in a List, but in a ComboBox and, such is fate, the Flex ComboBox does not have an iconField property.

    However, those who have looked into the Flex components in any detail will know that the ComboBox control uses the List control internally, to display its own drop down portion. So, I delved into the classes to see what I could find and the result of that find was as follows:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" >


    <mx:Script>
    [Embed(source="one.png")]
    var iconSymbol1:String;
    [Embed(source="two.png")]
    var iconSymbol2:String;
    [Embed(source="three.png")]
    var iconSymbol3:String;
    </mx:Script>

    <mx:ComboBox id="theCombo"
    creationComplete="theCombo.getDropdown().iconField='icon'" >
    <mx:dataProvider>
    <mx:Array>
    <mx:Object label="One" icon="{ iconSymbol1 }" />
    <mx:Object label="Two" icon="{ iconSymbol2 }" />
    <mx:Object label="Three" icon="{ iconSymbol3 }" />
    </mx:Array>
    </mx:dataProvider>
    </mx:ComboBox>

    </mx:Application>



    圖片如下:


    Simple! The highlighted code shows that we can get the List portion of the ComboBox control using the getDropdown() method of the ComboBox, and set its iconField property in the same manner as we did with the List control previously. For those that haven't yet investigated Flex in any detail, the creationComplete property allows us to define a handler that will run when the component instance has been created.

    There is one further point worth noting - the original poster wanted to be able to change the icon at runtime - the solution above does allow that. We can add the following to our MXML file so that when the user presses the button, the icons are rotated through the items in the dropdown.

    <mx:Button label="Rotate Icons" click="rotate();" />

    <mx:Script>

    <![CDATA[

    public function rotate() : Void
    {
    var firstIcon = theCombo.dataProvider[0].icon;
    for ( var i = 1; i < theCombo.dataProvider.length; i++ )
    {
    theCombo.dataProvider[i-1].icon = theCombo.dataProvider[i].icon;
    }

    theCombo.dataProvider[theCombo.dataProvider.length-1].icon = firstIcon;

    theCombo.bLabelFieldChanged = true;
    theCombo.invalidate();

    theCombo.dispatchEvent({type:"labelFieldChanged"});
    }
    ]]>

    </mx:Script>

    The for loop in the rotate() method is self-explanatory, but the last three lines in the method need further explanation. Because we are changing the underlying List component of the ComboBox, the ComboBox icons are not updated when we update the data provider. By including those three lines (which are what are called when the labelField property of the ComboBox is changed), the ComboBox is tricked into redrawing its drop down items. This is a quick and dirty way to get it working - I'm going to investigate a better solution.

    After the user has pressed the button (which is hidden under the drop down portion of the control), the ComboBox looks as follows, with the icons having moved:



    圖片如下:


    The obvious next step in the development of the above is to extract the code to a new component, which could then be used within any application. We'll show how that can be done in a future blog entry.

    This example does show the power of Flex,

    posted on 2007-04-11 10:20 leoli 閱讀(828) 評論(0)  編輯  收藏 所屬分類: Flex

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案(17)

    文章分類(86)

    收藏夾(3)

    flex blog

    good site

    java blog

    my friend

    tools

    抓蝦

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久精品九九亚洲精品| 亚洲国产午夜电影在线入口| 亚洲A∨午夜成人片精品网站 | 国产产在线精品亚洲AAVV| free哆拍拍免费永久视频| 嫖丰满老熟妇AAAA片免费看| 免费人成在线观看网站视频| 亚洲国产一区在线| 黄色a三级三级三级免费看| 四虎成年永久免费网站| 亚洲色中文字幕无码AV| 亚洲乱色伦图片区小说| 免费无码毛片一区二区APP| jizzjizz亚洲| 一级毛片免费全部播放| 午夜寂寞在线一级观看免费| 亚洲国产综合精品中文第一区| 日韩免费视频一区二区| 亚洲精品岛国片在线观看| 亚洲色大成网站www| 久久精品免费一区二区| 亚洲精品伊人久久久久| 中文字幕亚洲免费无线观看日本 | 亚洲处破女AV日韩精品| 欧洲乱码伦视频免费国产 | 国产成人涩涩涩视频在线观看免费| 99亚洲精品高清一二区| 在线观看免费中文视频| 亚洲首页国产精品丝袜| a级毛片在线免费| 亚洲偷自拍拍综合网| 美女被爆羞羞网站在免费观看| 亚洲色一色噜一噜噜噜| 久久一本岛在免费线观看2020| 日韩精品亚洲aⅴ在线影院| 男男gvh肉在线观看免费| 国产AV无码专区亚洲AWWW | 2020久久精品亚洲热综合一本| 免费大香伊蕉在人线国产| 亚洲国产综合精品中文第一| 国产精品无码素人福利免费|