2009-07-10 14 views
1

私はプログラムで子を動的に追加したり削除したりするVBoxを持っています。高さは100%、verticalScrollPolicy = autoに設定されています。Flex 3で高さが明示的に設定されていない限り、VBoxをオートスクロールできません。

ユーザーが別の子をそのVboxに追加したい場合、その子が追加されているので、VBoxの下部に自動スクロールします。

私はオンラインで見つけることができるすべてのソリューションを試しましたが、verticalScrollPositionとmaxVerticalScrollPositionはどちらも常に0です。私が手動でVBoxの下部までスクロールし、これらの番号を通知するボタンを押しても( 'validateNow()'の後でさえ)。

VBoxの高さがピクセル単位で設定されている場合は、これらの数値をプログラマチックに変更することができます。子どもはすべて高さが変化するので、必要ありません。

ピクセル単位でハードコードすることなくverticalScrollPositionを設定できることを教えてください。私は何か完全にここで明白なものを逃していますか

答えて

2

実際にはVBoxをスクロールしていない可能性があります。あなたのVBoxがCanvasなどの別のコンテナに含まれていて、あなたが言うようにVBoxにアイテムを追加している場合は、VBoxではなくスクロールしているCanvasですこの場合、VBoxはスクロール位置に対して実際に0を返します。

ちょっとしたことですが、コンポーネントの高さを設定する必要があります。制約レイアウト設定(たとえば、「bottom = '10 '」など)でも機能しません。しかし、VBoxの高さを設定することができれば、ディメンションを何らかの形で別のコントロールにバインドするか、子の追加/作成プロセスの一部として明示的に設定することによって、後で実行することができます。

ここでは、例を説明するために私が試したAIRアプリケーションの例を示します。基本的には、VBoxにランダムなサイズのボックスを追加するだけで、各子が作成されるとVBoxの下部にスクロールします。この場合

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" verticalScrollPolicy="off" horizontalScrollPolicy="off" width="250"> 

    <mx:Script> 
     <![CDATA[ 

      import mx.core.Application; 
      import mx.containers.Box; 
      import mx.events.FlexEvent; 

      private function addItem(h:Number):void 
      { 
       var b:Box = new Box(); 
       b.width = 200; 
       b.setStyle("backgroundColor", 0xFFFFFF); 
       b.height = h; 

       // Wait for the component to complete its creation, so you can measure and scroll accordingly later 
       b.addEventListener(FlexEvent.CREATION_COMPLETE, b_creationComplete); 
       vb.addChild(b); 
      } 

      private function b_creationComplete(event:FlexEvent):void 
      { 
       event.currentTarget.removeEventListener(FlexEvent.CREATION_COMPLETE, b_creationComplete); 
       vb.verticalScrollPosition = vb.getChildAt(vb.numChildren - 1).y; 
      } 

     ]]> 
    </mx:Script> 

    <mx:VBox id="vb" top="10" right="10" left="10" height="{Application.application.height - 80}" verticalScrollPolicy="on" /> 
    <mx:Button label="Add Item" click="addItem(Math.random() * 100)" bottom="10" left="10" /> 

</mx:WindowedApplication> 

、のVBoxの高さ(ここでは、単にアプリケーション)は、その含有成分の高さに結合されています。他のすべてはかなり自明でなければならない。

希望に役立ちます!ご不明な点がありましたら、ご返信ください。

+0

あなたは正しく、スクロールするキャンバスの中に成長しているVBoxでした。代わりにキャンバスをスクロールする必要がありました。ありがとう。 – markmarkoh

+0

'height =" {parentID.height} "'がうまくいきませんでした(私はスクロールバーを持っていましたが、VBoxは20ピクセルの高さのような) –

関連する問題