保持儿童固定的大小

时间:2011-07-19 12:36:17

标签: flash flex size scrollbar

我有以下设置:

<mx:Canvas>
 <mx:ViewStack width="800" height="600">

  <mx:Canvas width="100%" height="100%">
   <s:BorderContainer width="100%" height="100%">
    <mx:Canvas x="80" y="46" width="640" height="480">
      <custom:CustomComponent width="640" height="480" />
    </mx:Canvas>
   </s:BorderContainer>
  </mx:Canvas>

 </mx:ViewStack>
</mx:Canvas>

<custom:CustomComponent />是我无法改变的。它是显示视频的东西。但是,出于某种原因,某些东西(我猜的容器)的大小为800 x 600。所以我在<custom:CustomCompnent />内得到了滚动条。

有没有办法可以强迫某个容器的所有孩子超过一定的宽度/高度。

1 个答案:

答案 0 :(得分:2)

您可以覆盖自定义容器的addChildAt()方法。 (这也包括addChild() - 方法,因为addChild()调用addChildAt())。在那里,您可以检查宽度和高度,并添加changeWatchers以在每次组件的宽度/高度更改时进行检查。应该使用changewatchers,因为DisplayObject没有maxWidth / maxHeight属性(否则它会更容易)。

override public function addChildAt(child:DisplayObject, index:int):DisplayObject
{
    super.addChildAt(child, index);

    if(child.width > 640)child.width = 640;
    if(child.height > 480)child.height = 480;

    ChangeWatcher.watch(child, "width", function():void{child.width = (child.width > 640) ? 640 : child.width;});
    ChangeWatcher.watch(child, "height", function():void{child.height = (child.height > 480) ? 480 : child.height;});
}

修改

当您想要使用此代码时,只需创建一个扩展Canvas类的新类,如下所示:

package com
{
    import mx.containers.Canvas

    public class CustomCanvas extends Canvas
    {
        public function CustomCanvas():void
        {
            super();
        }

        override public function addChildAt(child:DisplayObject, index:int):DisplayObject
        {
            super.addChildAt(child, index);

            if(child.width > 640)child.width = 640;
            if(child.height > 480)child.height = 480;

            ChangeWatcher.watch(child, "width", function():void{child.width = (child.width > 640) ? 640 : child.width;});
            ChangeWatcher.watch(child, "height", function():void{child.height = (child.height > 480) ? 480 : child.height;});
        }
    }
}

为了使用简单的mxml添加它,你可以做这样的事情。这将具有Canvas所具有的所有功能,并使用您自己的adchild()功能进行扩展。

<com:CustomCanvas someproperty="somevalue"></com:CustomCanvas>