扩展 DataGridColumn 并指定 paddingLeft

发布于 2024-10-03 22:30:26 字数 942 浏览 4 评论 0原文

我正在尝试扩展 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保存):路径:DataGridColumnExt- generated.as,行:68,列:13] DataGridColumnWithLeftPadding Unknown 1290353024334 24677

I'm tring to Extend DataGridColumn, and in the extending class, trying
to specify a value for paddingLeft, but I am unable to compile it.

Using 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>

Error I get :
Access of possibly undefined property styleDeclaration through a reference with static type DataGridColumnExt. [Generated code (use -keep to save): Path: DataGridColumnExt-generated.as, Line: 68, Column: 13] DataGridColumnWithLeftPadding Unknown 1290353024334 24677

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原谅过去的我 2024-10-10 22:30:26

您不需要扩展 DataGridColumn 来更改填充,并且您已经注意到在 DataGridColumnExt 中设置样式 paddingLeft 不会不工作。我想它不起作用,因为 DataGridColumn 仅用作样式的代理。列的项目渲染器从列派生其样式。因此,您有几个选项可以完成您想要做的事情(请参阅下面的示例):

  1. 使用 mx:DataGridColumn 并在其上设置所需的样式,例如 paddingLeft 。该列的项目渲染器将使用填充(请参阅我的示例中的“Column 1”)。
  2. 创建您自己的项目渲染器(您可以扩展 mx:DataGridItemRenderer,直接在项目渲染器中设置样式并相应地设置列的 itemRenderer 属性(请参阅我的 )。
  3. 如果您经常需要使用具有相同样式的同一列,那么创建您自己的 DataGridColumn 并在自定义列中设置 itemRenderer 是有意义的(请参阅 在我的示例中为“Column 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);
        }
    }
}

You don't need to extend DataGridColumn in order to change the padding and as you've already noticed setting the style paddingLeft in your DataGridColumnExt doesn't work. I guess it doesn't work since the DataGridColumn works only as a proxy for the styles. The column's item renderer derives its styles from the column. So, you have a few options to accomplish what you are trying to do (see my example below):

  1. Use mx:DataGridColumn and set the desired styles like paddingLeft on it. The column's item renderer will use the padding (see "Column 1" in my example).
  2. Create your own item renderer (you could extend mx:DataGridItemRenderer, set the styles directly in the item renderer and set the column's itemRenderer property accordingly (see "Column 2" in my example).
  3. In case you often need to use the same column with the same styles it would make sense to create your own DataGridColumn and set your itemRenderer within your custom column (see "Column 3" in my example).

<?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);
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文