package { import mx.containers.Canvas; import mx.core.ScrollPolicy; import mx.events.FlexEvent; public class ResizeScrollingCanvas extends Canvas { public function ResizeScrollingCanvas() { super(); addEventListener(FlexEvent.UPDATE_COMPLETE, updateCompleteHandler); } protected var hadScrollBar : Boolean; protected var oldVerticalScrollPolicy : String; protected function updateCompleteHandler(event : FlexEvent) : void { var hasScrollBar : Boolean = (this.verticalScrollBar != null); trace("updateDisplayList before / after = " + hadScrollBar + " / " + hasScrollBar + " scrollbar = " + verticalScrollBar + " policy = " + verticalScrollPolicy); if (verticalScrollBar != null) trace("min = " + verticalScrollBar.minScrollPosition + ", max = " + verticalScrollBar.maxScrollPosition); if (hasScrollBar && verticalScrollBar.maxScrollPosition == 0) { //Remove scrollbar verticalScrollPolicy = oldVerticalScrollPolicy; trace("Off! policy = " + verticalScrollPolicy + ", oldPolicy = " + oldVerticalScrollPolicy); } //Change? if(hasScrollBar != hadScrollBar) { //Changed! From off to on? trace("Changed!"); if (hasScrollBar) { oldVerticalScrollPolicy = (this.verticalScrollPolicy == ScrollPolicy.ON) ? ScrollPolicy.ON : ScrollPolicy.AUTO; verticalScrollPolicy = ScrollPolicy.ON; trace("On! policy = " + verticalScrollPolicy + ", oldPolicy = " + oldVerticalScrollPolicy); } //Force redraw. Needed? invalidateDisplayList(); } hadScrollBar = (verticalScrollBar != null); } } }