Call invalidateDisplayList() on gridItem. Regards, Gautam.
2009/8/23 Sébastien Tromp <[email protected]> > > > Hello everyone, > > I have a difference in behaviour using Flex which I cannot understand (I am > rather new to this). Here is the thing: > > I have a FarmBoard.mxml component that extends Canvas, which contains: > > <mx:Grid x="12" y="70" width="448" height="271"> > <mx:GridRow width="100%" height="100%"> > <farm:FarmGridItem styleName="gridItem" width="100%" > height="100%" id="gridCell2"/> > <farm:FarmGridItem styleName="gridItem" width="100%" > height="100%" id="gridCell5"/> > ... > </mx:GridRow> > </mx:Grid> > > The FarmGridItem is an ActionScript component defined like this: > > public class FarmGridItem extends GridItem > { > private var _innerCanvas:Canvas; > > public function FarmGridItem() > { > trace(this + "\t Initializing farm grid item"); > super(); > > var canvas1:Canvas = new Canvas(); > canvas1.percentWidth = 100; > canvas1.percentHeight = 100; > canvas1.setStyle("backgroundColor", "0xFFFFFF"); > canvas1.setStyle("backgroundAlpha", "0.0"); > canvas1.addEventListener(DragEvent.DRAG_ENTER, onDragEnter); > super.addChild(canvas1); > > _innerCanvas = new Canvas(); > _innerCanvas.percentWidth = 90; > _innerCanvas.percentHeight = 90; > _innerCanvas.setStyle("horizontalCenter", "0"); > _innerCanvas.setStyle("verticalCenter", "0"); > canvas1.addChild(_innerCanvas); > > // For debugging purposes > var _innerCanvas2:Canvas = new Canvas(); > _innerCanvas2.setStyle("backgroundColor", "0xFFFFFF"); > _innerCanvas2.setStyle("backgroundAlpha", "1.0"); > this.addChild(_innerCanvas2); > } > > override public function > addChild(child:DisplayObject):DisplayObject > { > trace(this + "\t Adding child: " + child); > (child as UIComponent).percentHeight = 90; > (child as UIComponent).percentWidth = 90; > return _innerCanvas.addChild(child); > } > > Basically its role is to create "smaller" objects on the main grid (I did > not find another way to make sure that everytime I add an object to my main > Grid, it takes only, say, 90% of the cell space). > Please note the folowing piece of code in the constructor that I have added > for debugging purposes. > > var _innerCanvas2:Canvas = new Canvas(); > _innerCanvas2.setStyle("backgroundColor", "0xFFFFFF"); > _innerCanvas2.setStyle("backgroundAlpha", "1.0"); > this.addChild(_innerCanvas2); > > With this code, I get a grid full of white cells (which is what I want). If > I remove the above piece of code to call it from another place (this > function gets called after the creationComplete event is dispatched; I use > it to initialize the data on each of my grid cells): > > private function initializeFarm():void > { > var gridItem:FarmGridItem = > FarmGridItem(getFarmView()["gridCell5"]); > if (gridItem != null) > { > // We really go through this piece of code > var _innerCanvas2:Canvas = new Canvas(); > _innerCanvas2.setStyle("backgroundColor", "0xFFFFFF"); > _innerCanvas2.setStyle("backgroundAlpha", "1.0"); > gridItem.addChild(_innerCanvas2); > } > } > } > > However, after the above code executes, the background of my cells > stubbornly keeps on remaining transparent (even though I have a log that > says FarmBoard226.Grid237.GridRow238.gridCell5 Adding child: > CanvasView375) > I do not know if I have provided enough information, but does anyone have a > clue on why the behaviour is different? > > Thanks a lot, > -- > Sebastien Tromp > > >

