我有以下设置:
<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 />
内得到了滚动条。
有没有办法可以强迫某个容器的所有孩子超过一定的宽度/高度。
答案 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>