保持儿童固定大小

问题描述:

我有以下设置:保持儿童固定大小

<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

最好的办法,找出该容器超越定的宽度和高度,只需添加背景颜色为红色,蓝色,绿色等,并运行你的应用程序,看看它究竟是哪个组件导致此问题。它是处理这类问题的简单方法。 –

+0

你为什么使用MX *和* Spark组件?这里的一切都可以做成Spark。 –

+0

说实话J_A_X,我不知道我在做什么。我知道我使用Spark和MX,但我不知道它是什么。我只是试图一起破解一些看起来不错并且很快为作业做好准备的东西:) –

您可以重写自定义容器的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;}); 
} 

编辑

当你想使用此代码,只需创建一个新的类,它扩展画布类,像这样:

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> 
+0

好的真棒,但我在哪里放这个代码?因为如果我把它放在应用程序中,显然所有东西都会被覆盖。 (在'

+0

我编辑了我的答案,并回答了你的问题; –

+0

Doh ofcourse就是这样。谢谢你的贡献:D –