Apache flex 扩展DataGridColumn并指定paddingLeft

Apache flex 扩展DataGridColumn并指定paddingLeft,apache-flex,flash,actionscript-3,mxml,Apache Flex,Flash,Actionscript 3,Mxml,我尝试扩展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

我尝试扩展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>

DataGridColumnText.mxml:

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

我得到的错误:

通过静态类型为DataGridColumnText的引用访问可能未定义的属性styleDeclaration。[生成的代码(使用-keep保存):路径:DataGridColumnExt-Generated.as,第68行,第13列]DataGridColumnWithLeftPadding未知1290353024334 24677

您不需要扩展
DataGridColumn
来更改填充,正如您已经注意到的那样,在
DataGridColumnText
中设置样式
paddingLeft
不起作用。我猜它不起作用,因为
DataGridColumn
只作为样式的代理。该列的项目渲染器从该列派生其样式。因此,您有几个选项来完成您要做的事情(请参见下面的示例):

  • 使用
    mx:DataGridColumn
    并在其上设置所需的样式,如
    paddingLeft
    。列的项呈现器将使用填充(请参见我的示例中的“列1”)
  • 创建您自己的项目渲染器(您可以扩展
    mx:datagriditemrender
    ,直接在项目渲染器中设置样式,并相应地设置列的
    itemrender
    属性(请参见我的示例中的“列2”)
  • 如果您经常需要使用具有相同样式的同一列,则可以创建自己的
    DataGridColumn
    ,并在自定义列中设置
    itemrender
    (请参见我的示例中的“第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>
    
    <?xml version="1.0" encoding="utf-8"?>
    <mx:DataGridItemRenderer xmlns:mx="http://www.adobe.com/2006/mxml" paddingLeft="20">
    </mx:DataGridItemRenderer>
    
    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);
            }
        }
    }