扩展DataGridColumn并指定paddingLeft

时间:2010-11-22 13:06:51

标签: 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 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>

我得到错误:
通过静态类型DataGridColumnExt的引用访问可能未定义的属性styleDeclaration。 [生成代码(使用-keep保存):Path:DataGridColumnExt-generated.as,Line:68,Column:13] DataGridColumnWithLeftPadding Unknown 1290353024334 24677

1 个答案:

答案 0 :(得分:2)

您无需延长DataGridColumn以更改填充,因为您已经注意到在paddingLeft中设置样式DataGridColumnExt不起作用。我想它不起作用,因为DataGridColumn仅作为样式的代理。列的项呈示器从列中派生其样式。所以,你有几个选项来完成你想要做的事情(见下面的例子):

  1. 使用mx:DataGridColumn并在其上设置所需的样式,如paddingLeft。列的项呈示器将使用填充(请参阅我的示例中的“第1列”)。
  2. 创建您自己的项目渲染器(您可以扩展mx:DataGridItemRenderer,直接在项目渲染器中设置样式并相应地设置列的itemRenderer属性(请参阅我的示例中的“第2列”)。
  3. 如果您经常需要使用具有相同样式的相同列,则有必要创建自己的DataGridColumn并在自定义列中设置itemRenderer(请参阅我的“第3列”)例子)。

  4. <?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);
            }
        }
    }