0

对,所以我有DataGrid两列。在左列中,我希望文本向右对齐:更具体地说,如果列太小而无法显示整个文本,我希望它包含最右边的内容。

我设法通过使自定义类扩展CellRenderer并将DataGrid'cellRenderer属性设置为该类来对齐它,如本文中所述。但是,这并不完全符合我的要求。它确实将文本向右对齐,但如果列太小而无法容纳所有文本,它仍然只显示最左边的部分。

有谁知道我怎样才能让它显示文本的最右边?

您知道,这是在 FlashDevelop 中的纯 AS3 AIR 应用程序中,我的类与我CellRenderer在上面链接到的文章中的类相同(即RightAlignCell)。

4

1 回答 1

2

这是我的原始代码CellRenderer

package  
{
    import fl.controls.listClasses.CellRenderer;
    import fl.controls.listClasses.ICellRenderer;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;

    public class RightAlignCell extends CellRenderer implements ICellRenderer
    {
        private var tf:TextFormat;

        public function RightAlignCell() 
        {
            tf = new TextFormat();
            tf.align = TextFormatAlign.RIGHT;
        }

        override protected function drawLayout():void
        {
            textField.setTextFormat(tf);
            super.drawLayout();
        }

    }

}

但是,更改 的值textField.x没有效果。我认为这是因为我super.drawLayout()在覆盖版本的末尾调用,这显然将值更改回默认值。如果我一开始就调用它,改变x工作(我在这里使用 -50 作为一个明显的例子):

        override protected function drawLayout():void
        {
            super.drawLayout();
            textField.setTextFormat(tf);
            textField.x = -50;
        }

但是,如果我尝试将值设置为this.width - textField.width,正如 Gio 建议的那样,它应该给出所需的结果,它只会增加x5 个像素。我发现问题又是super.drawLayout(). 似乎它正在调整textField' 的宽度以适合列内,这就是我的计算不起作用的原因。我试图删除它的功能,但这是一团糟,因为它处理了列正确显示所需的大量代码。因此,我想使用以下属性textField自动调整大小到适当的宽度,即使在调整大小时也是如此:super.drawLayout()autoSize

        override protected function drawLayout():void
        {
            super.drawLayout();
            textField.setTextFormat(tf);
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.x = this.width - textField.width;
        }

现在它工作了,虽然有一些障碍。这些都是最小的,并且通过将定义文本格式和自动调整大小的行移动到构造函数来修复CellRenderer(我意识到我应该首先完成)。最后,我的最后一个功能类是这样的:

package  
{
    import fl.controls.listClasses.CellRenderer;
    import fl.controls.listClasses.ICellRenderer;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    import flash.text.TextFieldAutoSize;

    public class RightAlignCell extends CellRenderer implements ICellRenderer
    {
        private var tf:TextFormat;

        public function RightAlignCell() 
        {
            tf = new TextFormat();
            tf.align = TextFormatAlign.RIGHT;
            textField.setTextFormat(tf);
            textField.autoSize = TextFieldAutoSize.LEFT;
        }

        override protected function drawLayout():void
        {
            super.drawLayout();
            textField.x = this.width - textField.width - 5;
        }

    }

}

减去 5 个像素textField.x只是为了使文本看起来更好,而不是触摸列的边框。

很抱歉这么长的帖子,虽然解决方案很简单,但我决定深入解释一下。基本上我只是想出了上面的课程,它奏效了。

于 2013-01-06T18:37:56.257 回答