2010-11-22 57 views
0

我想扩展DataGridColumn,并在扩展类中,尝试
为paddingLeft指定一个值,但我无法编译它。扩展DataGridColumn并指定paddingLeft

使用Flex Builder 3:

mainApp.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> 
    <mx:DataGrid x="191" y="171"> 
     <mx:columns> 
      <local:DataGridColumnExt headerText="Column 1" dataField="col1"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 

DataGridColumnExt.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGridColumn xmlns="*" xmlns:mx="http://www.adobe.com/2006/mxml" paddingLeft="10"> 
</mx:DataGridColumn> 

错误,我得到:通过基准可能未定义的属性styleDeclaration的
访问与静态类型DataGridColumnExt。 [生成的代码(使用-keep保存):路径:DataGridColumnExt-generated.as,行:68,列:13] DataGridColumnWithLeftPadding未知1290353024334 24677

回答

2

你不需要为了延长DataGridColumn改变填充和因为您已经注意到在您的DataGridColumnExt中设置样式paddingLeft不起作用。我猜这是行不通的,因为DataGridColumn只能作为样式的代理。列的项目渲染器从列中派生其样式。所以,你有几个选项来完成你正在尝试做的(见下面的示例所示):

  1. 使用mx:DataGridColumn并设置像paddingLeft它所需的样式。该列的项目渲染器将使用填充(请参见我的示例中的“第1列”)。
  2. 创建自己的项目渲染器(可以扩展mx:DataGridItemRenderer,直接在项目渲染器设置的样式并设置相应列的itemRenderer财产(见“列2”在我的例子)。
  3. 如果你经常需要使用与同风格同列这将是有意义的创建自己的DataGridColumn和您的自定义列内设置你的itemRenderer(见“列3”在我的例子)。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> 
    <mx:DataGrid x="191" y="171" dataProvider="{[{value: 'foo'}, {value : 'bar'}]}"> 
     <mx:columns> 
      <mx:DataGridColumn headerText="Column 1" dataField="value" paddingLeft="20"/> 
      <mx:DataGridColumn headerText="Column 2" dataField="value" itemRenderer="ItemRendererWithPadding"/> 
      <local:DataGridColumnExt headerText="Column 3" dataField="value"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 

ItemRendererWithPadding.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGridItemRenderer xmlns:mx="http://www.adobe.com/2006/mxml" paddingLeft="20"> 
</mx:DataGridItemRenderer> 

DataGridColumnExt.as

package 
{ 
    import mx.controls.dataGridClasses.DataGridColumn; 
    import mx.core.ClassFactory; 

    public class DataGridColumnExt extends DataGridColumn 
    { 
     public function DataGridColumnExt(columnName:String = null) 
     { 
      super(columnName); 
      itemRenderer = new ClassFactory(ItemRendererWithPadding); 
     } 
    } 
}