您可以重寫自定義容器的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>
最好的辦法,找出該容器超越定的寬度和高度,只需添加背景顏色爲紅色,藍色,綠色等,並運行你的應用程序,看看它究竟是哪個組件導致此問題。它是處理這類問題的簡單方法。 –
你爲什麼使用MX *和* Spark組件?這裏的一切都可以做成Spark。 –
說實話J_A_X,我不知道我在做什麼。我知道我使用Spark和MX,但我不知道它是什麼。我只是試圖一起破解一些看起來不錯並且很快爲作業做好準備的東西:) –