Я делал это несколько раз, чтобы выяснить проблемы с макетом, но не из MXML.
В AS вы можете нарисовать прямоугольник в графическом слое данных компонентов.
Один из подходов состоит в том, чтобы создать прослушиватель для события creationComplete родительских компонентов MXML и нарисовать там свои прямоугольники - вам нужно подождать, пока все не завершится, создание экземпляра и измерение, чтобы убедиться, что у вас есть правильные измерения.
Вы также захотите создать слушатель изменения размера, если ваше приложение изменяет размер.
Что-то, примерно так:
private function creationCompleteListener():void
{
drawRectanglesAroundDisplayElements();
}
private function drawRectanglesAroundDisplayElements():void
{
for each(var displayElement:DisplayObject in displayList)
{
var graphicsLayer:Graphics = displayElement.graphics;
graphicsLayer.lineStyle(1,0xFF0000);
graphicsLayer.drawRect(0,0,displayElement.width, displayElement.height);
}
}
Он будет проходить через все экранные объекты, включая объекты DisplayObjectContainer, и обводит их красной рамкой размером 1 пиксель.
Вы можете предпочесть выделять только определенные типы экранных объектов, и если это так, вы можете фильтровать, проверяя имя или тип данных данного DisplayObject.
Иногда я добавляю заливку с полупрозрачным фоном также для определенных объектов. Я считаю, что перекрывающиеся фоны легче увидеть, чем пересекающиеся линии (конечно, это часто неосуществимо).
Например, если вы хотите придать всем VBox прозрачный синий bg, а также красный контур, вы можете изменить приведенное выше так:
private function drawRectanglesAroundDisplayElements():void
{
for each(var displayElement:DisplayObject in displayList)
{
var graphicsLayer:Graphics = displayElement.graphics;
if(displayElement is VBox)
{
graphicsLayer.beginFill(0x0000FF,.3);
graphicsLayer.drawRect(0,0,displayElement.width, displayElement.height);
graphicsLayer.endFill();
}
graphicsLayer.lineStyle(1,0xFF0000);
graphicsLayer.drawRect(0,0,displayElement.width, displayElement.height);
}
}
Надеюсь, это поможет.