This is how I do it:

I create an empty component named RepeatedBackgroundBox.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"; width="100%"
height="100%">

</mx:VBox>


Next I create an AS file named RepeatedBackground.as:

/*
     RepeatedBackground

     Use this BorderSkin with backgroundImage

     Embed properties scaleGridTop, scaleGridBottom, scaleGridLeft, and
scaleGridRight do not work.
*/
package
{
     import flash.display.Bitmap;
     import flash.display.BitmapData;
     import flash.display.Graphics;
     import flash.display.Loader;
     import flash.events.Event;
     import flash.events.IOErrorEvent;
     import flash.geom.Matrix;
     import flash.net.URLRequest;

     import mx.controls.Image;
     import mx.core.BitmapAsset;
     import mx.graphics.RectangularDropShadow;
     import mx.skins.RectangularBorder;
     import mx.core.Application;
     import mx.core.UIComponent;

     public class RepeatedBackground extends RectangularBorder {

         private var tile:BitmapData;

         private var imgCls:Class;

         override protected function
updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
             super.updateDisplayList(unscaledWidth, unscaledHeight);

             // Use UIComponent to handle any container

             // Check if parent is valid
             // In some Application initializaton states this might be
false, I was getting an error
             if( this.parent != null ) {
                 // The backgroundImage on the parent will become "" so
we need to keep the class around
                 // for every object updateDisplayList
                 if( imgCls == null ) {
                     var backgroundImage:Object = UIComponent(
this.parent ).getStyle( "backgroundImage" );
                     if( backgroundImage != null && backgroundImage != ""
) {
                         imgCls = Class( backgroundImage );
                         (this.parent as UIComponent).setStyle(
"backgroundImage", "" );
                     }
                 }
                 // Do the actually bitmap filling here
                 if( imgCls != null ) {
                     try {
                         // imgCls could be a symbol in a SWF and the
class will not work
                         var background:BitmapAsset = BitmapAsset(new
imgCls());
                         tile = background.bitmapData;

                         var transform: Matrix = new Matrix();

                         graphics.clear();
                         graphics.beginBitmapFill(tile, transform, true);
                         graphics.drawRect(0, 0, unscaledWidth,
unscaledHeight);
                     } catch( e:TypeError ) {
                         // Throw an custom error if imgCls is not a
valid type
                         throw new Error( "backgroundImage value is not a
valid image class" );
                     } finally {
                         ;// Catch all just ignore
                     }
                 }
             }
         }
     }
}

Now, a CSS file with the RepeatedBackgroundBox definition:

RepeatedBackgroundBox
{
     paddingRight: 10;
     paddingLeft: 10;
     paddingTop: 5;
     borderSkin: ClassReference("RepeatedBackground");
     background-image: Embed("/assets/images/bg.gif");
}

Now all I have to do to use it is:

<custom:RepeatedBackgroundBox>
    Other components here
</custom:RepeatedBackgroundBox>


--- In flexcoders@yahoogroups.com, "xaero" <[EMAIL PROTECTED]> wrote:
>
> And then How can I set the page's background like in the HTML Css?
> That is:
> background-repeat: repeat-x;
> background-PositionX: left;
> background-PositionY: bottom;
>
> --- In flexcoders@yahoogroups.com, "Michael Schmalle"
> teoti.graphix@ wrote:
> >
> > No, you can't do this.
> >
> > Flex CSS is not 'real' css and does not conform to WC3.
> >
> > Mike
> >
>

Reply via email to