`
jiorry
  • 浏览: 277042 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

Flex DataGrid itemRanderer 里的Text控件实现textRollOverColor

阅读更多
如果有这样一个item Renderer,如下代码所示:
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" borderColor="#FFFFFF" > 
	<mx:Label id="title"/>
	<mx:Image source="logo.png"/>
</mx:Box>

很明显id=title的Label 是不会实现textRollOverColor的,因为Box的color无论如何变化都不会影响到title Label的字体颜色。

每一个grid item是mx.controls.dataGridClasses.DataGridItemRenderer的实例。textRollOverColor是DataGridItemRenderer在validateNow的时候重新计算得出的。例如 在下面代码validateNow里的 mytxt.setStyle("color", newColor);

解决方案代码如下:
public class labelItemRanderer extends HBox implements IDataRenderer, IDropInListItemRenderer,IListItemRenderer {
		public var mytxt:Label;
		
		public function TradeStatusItemRanderer() {
			super();
			mytxt= new Label();
			this.addChild(mytxt);
		}
		
	    private var _data:Object;
	    override public function get data():Object {
	        return _data;
	    }
	    override public function set data(value:Object):void {
	        _data = value;
	    }

		private var _listData:DataGridListData;

		[Bindable( "dataChange" )]
		public function get listData():BaseListData {
			return _listData;
		}

		public function set listData( value:BaseListData ):void {
			_listData = DataGridListData( value );
		}
		
		override public function validateNow():void
		{
			if (data && parent){
				var newColor:Number;
	
				if (DataGridBase(_listData.owner).isItemHighlighted(_listData.uid))
				{
	        		newColor = getStyle("textRollOverColor");
				}
				else if (DataGridBase(_listData.owner).isItemSelected(_listData.uid))
				{
	        		newColor = getStyle("textSelectedColor");
				}
				else
				{
	        		newColor = getStyle("color");
				}
	
			}
			mytxt.setStyle("color", newColor);
			super.validateNow();
		}
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics