2011-07-19 108 views
0

我有以下設置:保持兒童固定大小

<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,但我不知道它是什麼。我只是試圖一起破解一些看起來不錯並且很快爲作業做好準備的東西:) –

回答

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;}); 
} 

編輯

當你想使用此代碼,只需創建一個新的類,它擴展畫布類,像這樣:

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 –