如何在 AS3 DataGrid CellRenderer 中获取列宽?
How to get column width inside AS3 DataGrid CellRenderer?
我有一个 DataGrid,其中一列显示图片图标。这是通过使用特殊的 CellRenderer 完成的。是否可以在 CellRenderer 中找到列宽? this.width
总是 returns 一个明显错误的数字 (152),无论实际列宽是多少。我在 PC 和 Android 上试过这个。
我需要知道列宽以使图片居中。可能可以使用静态变量将实际列宽传递给 CellRenderer,但我想知道我是否忽略了一些明显的东西。
import fl.controls.listClasses.CellRenderer;
import flash.geom.Point;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.utils.*;
import flash.events.*;
public class CustomImageCellRenderer extends CellRenderer
{
public function CustomImageCellRenderer()
{
var iconClass : Class = getDefinitionByName("icon") as Class;
var iconMC : MovieClip = new iconClass();
trace("width=" + width); // always returns 152
addChild(iconMC );
}
override protected function drawBackground():void
{
var skin : Object;
if (_listData.index % 2 == 0)
{
skin = CellRenderer_upSkin2;
} else {
skin = CellRenderer_upSkin;
}
setStyle("upSkin", skin);
setStyle("overSkin", skin);
setStyle("downSkin", skin);
setStyle("selectedOverSkin", skin);
setStyle("selectedDownSkin", skin);
setStyle("selectedUpSkin", skin);
super.drawBackground();
}
}
通常您应该在 updateDisplayList 中完成所有布局工作 - 这是您应该获得正确尺寸的地方:
override protected function updateDisplayList(unscaledwidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
icon.x = int((unscaledWidth - icon.width)/2);
}
在覆盖的 drawBackground
方法中使用 this.width
:
override protected function drawBackground():void
{
super.drawBackground();
trace("width=" + this.width);
}
我有一个 DataGrid,其中一列显示图片图标。这是通过使用特殊的 CellRenderer 完成的。是否可以在 CellRenderer 中找到列宽? this.width
总是 returns 一个明显错误的数字 (152),无论实际列宽是多少。我在 PC 和 Android 上试过这个。
我需要知道列宽以使图片居中。可能可以使用静态变量将实际列宽传递给 CellRenderer,但我想知道我是否忽略了一些明显的东西。
import fl.controls.listClasses.CellRenderer;
import flash.geom.Point;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.utils.*;
import flash.events.*;
public class CustomImageCellRenderer extends CellRenderer
{
public function CustomImageCellRenderer()
{
var iconClass : Class = getDefinitionByName("icon") as Class;
var iconMC : MovieClip = new iconClass();
trace("width=" + width); // always returns 152
addChild(iconMC );
}
override protected function drawBackground():void
{
var skin : Object;
if (_listData.index % 2 == 0)
{
skin = CellRenderer_upSkin2;
} else {
skin = CellRenderer_upSkin;
}
setStyle("upSkin", skin);
setStyle("overSkin", skin);
setStyle("downSkin", skin);
setStyle("selectedOverSkin", skin);
setStyle("selectedDownSkin", skin);
setStyle("selectedUpSkin", skin);
super.drawBackground();
}
}
通常您应该在 updateDisplayList 中完成所有布局工作 - 这是您应该获得正确尺寸的地方:
override protected function updateDisplayList(unscaledwidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
icon.x = int((unscaledWidth - icon.width)/2);
}
在覆盖的 drawBackground
方法中使用 this.width
:
override protected function drawBackground():void
{
super.drawBackground();
trace("width=" + this.width);
}