我想要扩展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
答案 0 :(得分:2)
您无需延长DataGridColumn
以更改填充,因为您已经注意到在paddingLeft
中设置样式DataGridColumnExt
不起作用。我想它不起作用,因为DataGridColumn
仅作为样式的代理。列的项呈示器从列中派生其样式。所以,你有几个选项来完成你想要做的事情(见下面的例子):
mx:DataGridColumn
并在其上设置所需的样式,如paddingLeft
。列的项呈示器将使用填充(请参阅我的示例中的“第1列”)。mx:DataGridItemRenderer
,直接在项目渲染器中设置样式并相应地设置列的itemRenderer
属性(请参阅我的示例中的“第2列”)。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);
}
}
}