惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
爱范儿
爱范儿
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
博客园_首页
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
V
V2EX
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队

博客园 - LutzMark

charles4抓https请求的注意事项,补充iphone7(ios10系统)无法解密ssl问题 XCode设置自己windows习惯的快捷键(比如Home、End键) MVC项目中ExecutionTimeout不生效的解决方案 Delegate与Event的区别 坑爹的MSN登录错误80072745 Linq的sum函数InvalidOperationException异常解决办法 LINQ to SQL自定义映射表关系(1:N or 1:1) LINQ to SQL 外键约束的插入及获取主表标识列等问题 Flex中的 for in 与 for each in - LutzMark Flex的DataGrid将水平分隔线设为虚线 - LutzMark - 博客园 去除ColumnChart自带的阴影效果 - LutzMark - 博客园 IIS7中配置WebOrb支持RTMPT 使用DataAdpater自动批量更新DataSet中的数据到数据库 委托的Invoke 和 BeginInvoke 与Control的Invoke和BeginInvoke(转-因为写得很好) 控制台测试异步委托 一篇好文,以在迷茫时阅读 驳《IT开发工程师的悲哀》 钢板与表针 不用临时变量,只用11个字符交换两个变量的值——窥视C#编译原理的冰山一角
解决Flex的DataGrid控件中ItemRender随Scrollbar的滚动发生UI...
LutzMark · 2010-02-21 · via 博客园 - LutzMark

今天上午做一个复杂的DataGrid,其中几列是用ItemRender动态绘制按钮,遇到一个问题:DataGrid的第一行和最后一行的UI显示会随着DataGrid的Scollbar移动,而数据都正常。估计是Scollbar移动引起UI重绘,调试了好久也没解决。下午偶然间发现属性liveScrolling,试了一下搞定!

<mx:DataGrid
      left="3" right="3"
      alternatingItemColors="#FFFFFF"
      textRollOverColor="#6E6E70"
      rollOverColor="#F0F3F9"
      height="738"
      rowHeight="80"
      wordWrap="true"     
      headerHeight="0"
      top="144"
      id="dgTeam"
      fontWeight="bold"
      horizontalGridLines="true"
      borderThickness="0"
      color="#B3B4B7"
      variableRowHeight="true"
      paddingTop="8"
      paddingBottom="8"
      sortableColumns="true" dataProvider="{mockTeamData}" horizontalSeparatorSkin="{DashLine}"  verticalGridLineColor="#9e9fa3"    liveScrolling="false">
  
   <mx:columns>
    <mx:DataGridColumn headerText="Team Members"
           width="140"
           fontSize="12" dataField="name">
     <mx:itemRenderer>
      <mx:Component>
       <mx:Canvas creationComplete="init()">

        <mx:Script>
         <![CDATA[
          import mx.controls.Label;
          private var l:Label;
          private function init():void
          {
           l=new Label();
           l.x=10;
           l.text=data.name;
           l.addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
           l.addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);                        
           this.addChild(l);
          }
          
          private function onMouseOver(event:MouseEvent):void
          {
           l.setStyle("textDecoration","underline");
           l.setStyle("color","0x6E6E70");
          }
          private function onMouseOut(event:MouseEvent):void
          {
           l.setStyle("textDecoration","none");
           l.setStyle("color","0xB3B4B7");
          }
          
         ]]>
        </mx:Script>
       </mx:Canvas>
      </mx:Component>
     </mx:itemRenderer>
    </mx:DataGridColumn>
    <mx:DataGridColumn headerText="Not Started"
           id="status1"
           resizable="true"
        
           width="220"
           fontSize="9"
           color="#838487">
     <mx:itemRenderer>
      <mx:Component>
       <mx:Canvas creationComplete="{TeamColumnFormatter.InitRender(data.status1,data.name,this);}" >

        <mx:Script>
         <![CDATA[
          import mx.controls.Alert;
          
          import com.view.Team.TeamColumnFormatter;
    
         ]]>
        </mx:Script>
       </mx:Canvas>
      </mx:Component>
     </mx:itemRenderer>

    </mx:DataGridColumn>
    <mx:DataGridColumn headerText="In Progress"
        
           width="220"
           fontSize="9"
           color="#838487">
     <mx:itemRenderer>
      <mx:Component>
       <mx:Canvas creationComplete="TeamColumnFormatter.InitRender(data.status2,data.name,this);">
        <mx:Script>
         <![CDATA[
          import com.view.Team.TeamColumnFormatter;
         ]]>
        </mx:Script>
       </mx:Canvas>
      </mx:Component>
     </mx:itemRenderer>
    </mx:DataGridColumn>
    <mx:DataGridColumn headerText="Submitted"
         
           width="220"
           fontSize="9"
           color="#838487">
     <mx:itemRenderer>
      <mx:Component>
       <mx:Canvas creationComplete="TeamColumnFormatter.InitRender(data.status3,data.name,this)">
        <mx:Script>
         <![CDATA[
          import com.view.Team.TeamColumnFormatter;
         ]]>
        </mx:Script>
       </mx:Canvas>
      </mx:Component>
     </mx:itemRenderer>

    </mx:DataGridColumn>
    <mx:DataGridColumn headerText="Complete"
        
           width="220"
           fontSize="9"
           color="#838487">
     <mx:itemRenderer>
      <mx:Component>
       <mx:Canvas creationComplete="TeamColumnFormatter.InitRender(data.status4,data.name,this)">
        <mx:Script>
         <![CDATA[
          import com.view.Team.TeamColumnFormatter;
         ]]>
        </mx:Script>
       </mx:Canvas>
      </mx:Component>
     </mx:itemRenderer>

    </mx:DataGridColumn>

   </mx:columns>
  </mx:DataGrid>

TeamColumnFormatter.as:

package com.view.Team
{
 public class TeamColumnFormatter
 {
  import mx.controls.Alert;
  import com.view.Team.ColumnSquareButton;
  import flash.events.MouseEvent;

  public static function InitRender(customData:Object,nameData:Object, target:Object):void
  {
   var _x:uint=8;
   for (var i:uint=0; i < customData.length; i++)
   {
    var btn:ColumnSquareButton=new ColumnSquareButton();

    if (i < 6)
    {
     btn.x=_x;
     _x+=36;
    }
    else
    {
     if (i % 6 == 0)
     {
      _x=8;
     }

     btn.x=_x;
     _x+=36;
     btn.y=36 * Math.floor(i / 6);
    }

    btn.Label=customData[i].toString();
    btn.Name=nameData.toString();
    btn.addEventListener(MouseEvent.CLICK, onclick);
    target.addChild(btn);

   }
  }

  public static function onclick(event:MouseEvent):void
  {
   Alert.show("Redirect to "+event.currentTarget.Name + "'s assigned page:" + event.currentTarget.Label);
  }
 }
}