Flex3 Canvas,ScrollBar

时间:2009-03-13 14:43:50

标签: actionscript-3 flex flex3

我想在flex Sprite中添加一个“简单”Canvas。 我这样做:

var uic:UIComponent=new UIComponent;
var s:Sprite=new Sprite(); //<-- my simple Sprite
uic.addChild(s);

myCanvas.addChild(uic);

Sprite已正确添加到Canvas,但现在,我需要根据Canvas大小激活Sprite ScrollBar。 (画布有固定的尺寸)

任何想法都很好,

由于

1 个答案:

答案 0 :(得分:4)

您发现的问题是普通的UIComponent没有向其父级报告宽度或高度值(因为它根本不知道该值应该是什么!)。

如果你必须在Flex中使用简单的Sprites和其他原始显示对象,我建议创建一个UIComponent的子类,并覆盖measure()函数。在那里,将measuredWidth和measuredHeight属性设置为UIComponent的子项的大小。

这是一个你可能想要尝试的快速(和未经测试)的解决方案(在你的UIComponent子类中将取代普通的UIComponent):

override protected function measure():void
{
    super.measure();

    for(var i:int = 0; i < this.numChildren; i++)
    {
        var child:DisplayObject = this.getChildAt(i);
        this.measuredWidth = Math.max(this.measuredWidth, child.x + child.width);
        this.measuredHeight = Math.max(this.measuredHeight, child.y + child.height);
    }
}

就个人而言,只要有可能,我会尝试使所有内容成为UIComponent的正确子类,而不是创建这样的hacks,以使Sprite或其他非UIComponent类型在Flex的容器内工作。但是,您的方法似乎很常见,所以希望这对您和其他人有用。