Ключевое слово viewMetricsAndPadding.
И криво написанный результат(стили не работают, уж даж не помню как их делать)

Код AS3:
package
{
import flash.display.Graphics;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import mx.containers.Box;
import mx.core.EdgeMetrics;
[Style(name="linePadding", type="Number", format="Length", inherit="no")]
[Style(name="titleFontFamily", type="String", inherit="yes")]
[Style(name="titleFontColor", type="uint", format="Color", inherit="no")]
[Style(name="titleFontSize", type="Number", format="Length", inherit="no")]
[Style(name="paddingLeft", type="Number", format="Length", inherit="no")]
[Style(name="lineColor", type="uint", format="Color", inherit="no")]
public class XaBox extends Box
{
private var _linePadding:Number = 5;
private var _tf:TextField;
private var _tfFormat:TextFormat = new TextFormat();
private var _lineColor:uint = 0x000000;
public function XaBox()
{
super();
}
override protected function createChildren():void
{
super.createChildren();
_tf = new TextField();
_tf.autoSize = TextFieldAutoSize.LEFT;
rawChildren.addChild(_tf);
_tf.defaultTextFormat = _tfFormat;
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth,unscaledHeight);
if (_titleChange)
{
_tf.text = _title;
_titleChange = false;
}
var gr:Graphics = graphics;
gr.clear();
gr.lineStyle(1,_lineColor,1);
gr.moveTo(_linePadding/2 + 10,_linePadding/2);
_tf.x = _linePadding/2 + 10;
_tf.y = _linePadding/2-_tf.height/2;
gr.lineTo(_linePadding/2,_linePadding/2);
gr.lineTo(_linePadding/2,unscaledHeight - _linePadding/2);
gr.lineTo(unscaledWidth - _linePadding/2,unscaledHeight - _linePadding/2);
gr.lineTo(unscaledWidth - _linePadding/2,_linePadding/2);
gr.lineTo(unscaledWidth - _linePadding/2,_linePadding/2);
gr.lineTo(_linePadding/2 + _tf.getBounds(this).right,_linePadding/2);
}
private var _font:String;
private var _color:uint;
private var _size:Object;
override public function stylesInitialized():void
{
super.stylesInitialized();
_linePadding = getStyle('linePadding') ? getStyle('linePadding') : 10;
_font = getStyle('titleFontFamily') ? getStyle('titleFontFamily') : "Arial";
_color = getStyle('titleFontColor') ? getStyle('titleFontColor') : 0x000000;
_size = getStyle('titleFontSize') ? getStyle('titleFontSize') : 10;
_lineColor = getStyle('lineColor') ? getStyle('lineColor') : 0xFF0000;
}
override public function styleChanged(styleProp:String):void
{
if (styleProp == "paddingLeft" || styleProp == "paddingTop")
{
super.setStyle(styleProp, getStyle(styleProp)+_linePadding);
}
else if (styleProp == "linePadding")
{
_linePadding = getStyle("linePadding");
}
else if (styleProp == "lineColor") // дописываем свои всякие интересности
{
_lineColor = getStyle("lineColor");
}
else
{
super.styleChanged(styleProp);
}
if (_tf)
{
_tfFormat.font = _font;
_tfFormat.color = _color;
_tfFormat.size = _size;
_tf.defaultTextFormat = _tfFormat;
}
invalidateDisplayList();
}
private var _title:String = "Title";
private var _titleChange:Boolean = false;
public function set title(value:String):void
{
if (_title != value)
{
_titleChange = true;
_title = value;
invalidateDisplayList();
}
}
public function get title():String
{
return _title;
}
override public function get viewMetricsAndPadding():EdgeMetrics
{
var metr:EdgeMetrics = super.viewMetricsAndPadding;
metr.right += _linePadding;
metr.bottom += _linePadding;
return metr;
}
}
}
Нужно либо в теме, либо в цсс, либо при объявлении указать paddingLeft & top.