2011-07-19 17 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

だけRED、BLUEに背景色を追加し、与えられた幅と高さを超えて行くされているコンテナを見つけるための最善の方法、GREENなど、この問題の原因となっているコンポーネントを正確にそれを見るためにあなたのアプリケーションを実行します。このような問題に対処する簡単な方法です。 –

+0

なぜMX *と* Sparkコンポーネントを使用していますか?ここにあるものすべてをSparkにすることができます。 –

+0

正直言って、J_A_Xとは、私が何をしているのか分かりません。私はスパークとMXを使用していることを知っていますが、私はそれが何であるかはわかりません。私はちょうど一緒に何かを一緒にハックしようとしていると大丈夫だとすぐに学校の割り当てを行うには:) –

答えて

2

カスタムコンテナのaddChildAt()メソッドをオーバーライドできます。 addChild()はaddChildAt()を呼び出すため、これはaddChild()メソッドにも適用されます。ここで幅と高さを確認し、コンポーネントの幅/高さが変更されるたびに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;}); 
} 

EDIT

あなたはこのコードを使用したい場合は、ちょうどそうのように、キャンバスクラスを拡張する新しいクラスを作成:これを追加するために

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

それはそうです。お寄せいただきありがとうございます:D –

関連する問題