This may help or not. Its a bit of a hack. but if your always resizing children when the size of the container changes I may just leave it in as a permenant event listener.
Regards, Wesley <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();" initialize="maximize();" verticalScrollPolicy="off" horizontalScrollPolicy="off"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.ResizeEvent; private function clicked():void { foo.percentWidth = 50; foo.invalidateSize(); foo.validateNow(); txtWidth.text = foo.width.toString(); foo.addEventListener(ResizeEvent.RESIZE, handleResize); trace (foo.width); } private function handleResize(event:ResizeEvent):void{ Alert.show(event.target.width); foo.removeEventListener(ResizeEvent.RESIZE, handleResize); } ]]> </mx:Script> <mx:HBox height="24" top="0" left="0" right="0"> <mx:Button click="clicked()" label="click me"/> </mx:HBox> <mx:Canvas id="foo" width="100%" left="182" top="63" bottom="0" borderColor="red" borderThickness="1" borderStyle="solid"> </mx:Canvas> <mx:Text x="0" y="32" width="76" id="txtWidth"/> <mx:Text x="0" y="60" text="{foo.width}" width="76"/> </mx:WindowedApplication> On Wed, Aug 26, 2009 at 9:45 PM, jmfillman <[email protected]> wrote: > The code below should demonstrate the issue more specifically. > > What you get when the clicked() function is called, shows that there is a > slight delay in getting the width of the container. You'll note that the > trace statement returns the original width as does the txtWidth field. > > You will note, however, that if you bind to the width of the container, you > do get the correct width of the canvas. What I infer from this is that there > is a delay in FlashPlayer/Air in having the width value set. > > If, however, you use the previous example, posted Beau, this works, > presumably because the item you are re-sizing is within a container and the > LayoutManager deals with nested items first, as I recall. > > Why the validateNow() function doesn't complete before moving on to the > other two elements in the clicked() function, wasn't what I expected. This > is probably a speed thing in the function so as to not hold up other items > while the item is being validated??? > > <?xml version="1.0" encoding="utf-8"?> > <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" > layout="absolute" creationComplete="init();" initialize="maximize();" > verticalScrollPolicy="off" horizontalScrollPolicy="off"> > <mx:Script> > <![CDATA[ > > private function clicked():void > { > foo.percentWidth = 50; > foo.invalidateSize(); > foo.validateNow(); > txtWidth.text = foo.width.toString(); > trace (foo.width); > } > ]]> > </mx:Script> > <mx:HBox height="24" top="0" left="0" right="0"> > <mx:Button click="clicked()" label="click me"/> > </mx:HBox> > <mx:Canvas id="foo" width="100%" left="182" top="63" bottom="0" > borderColor="red" borderThickness="1" borderStyle="solid"> > > </mx:Canvas> > > <mx:Text x="0" y="32" width="76" id="txtWidth"/> > <mx:Text x="0" y="60" text="{foo.width}" width="76"/> > </mx:WindowedApplication> > > --- In [email protected], Beau Scott <beau.sc...@...> wrote: > > > > You'll need to invalidate the component's parent's size and revalidate it > > before your target's size is computed: > > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" > > layout="vertical"> > > <mx:Script> > > <![CDATA[ > > import mx.core.UIComponent; > > private function clicked():void > > { > > trace(bar.width); > > bar.percentWidth = bar.percentWidth == 100 ? 50 : 100; > > UIComponent(bar.parent).invalidateSize(); > > UIComponent(bar.parent).validateNow(); > > trace(bar.width); > > } > > ]]> > > </mx:Script> > > <mx:Box id="foo" width="100%" height="50" borderColor="red" > > borderThickness="1" borderStyle="solid"> > > <mx:Box id="bar" width="100%" height="100%" borderColor="blue" > > borderThickness="1" borderStyle="solid" /> > > </mx:Box> > > <mx:Button click="clicked()" label="click me" /> > > </mx:WindowedApplication> > > > > > > Run that and click the button to see the trace output. > > > > > > HTH, > > > > Beau > > > > > > > > > > On Wed, Aug 26, 2009 at 10:04 AM, jmfillman <jmfill...@...> wrote: > > > > > > > > > > > If you trace the width and measuredWidth immediately after setting the > > > percentWidth, both width and measuredWidth show the original width > instead > > > of the updated width. > > > > > > > > > --- In [email protected] <flexcoders%40yahoogroups.com>, > > > "valdhor" <valdhorlists@> wrote: > > > > > > > > What does canvas.measuredWidth give when the user clicks the button? > > > > > > > > > > > > --- In [email protected] <flexcoders%40yahoogroups.com>, > > > "jmfillman" <jmfillman@> wrote: > > > > > > > > > > I have a canvas container with="100%". When the user clicks a > button, > > > the container is set to percentWidth=20, and I need to immediately know > the > > > new width so that I can properly re-size elements in the container to > match > > > the new width. > > > > > > > > > > From what I can tell, the LayoutManager doesn't get to measuring > the > > > new width of the container right away. If the user clicks the button > again, > > > the LayoutManager has done it's thing and has set the width value of > the > > > canvas. > > > > > > > > > > So the question is, how do I get the new width of the canvas as > soon as > > > I set percentWidth=20? > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > Beau D. Scott > > Software Engineer > > > > > > > ------------------------------------ > > -- > Flexcoders Mailing List > FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt > Alternative FAQ location: > https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847 > Search Archives: > http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups > Links > > > >

