Проблема, которую вы обнаружили, заключается в том, что обычный UIComponent не сообщает значение ширины или высоты своему родителю (потому что он просто не знает, каким должно быть это значение!).
Если вам необходимо работать с простыми спрайтами и другими примитивными экранными объектами во Flex, я бы рекомендовал создать подкласс UIComponent с переопределением функции measure()
. Там установите для свойств selectedWidth и measureHeight размер дочерних элементов UIComponent.
Это быстрое (и не проверенное) решение, которое вы можете попробовать (в вашем подклассе UIComponent, который заменит простой UIComponent):
override protected function measure():void
{
super.measure();
for(var i:int = 0; i < this.numChildren; i++)
{
var child:DisplayObject = this.getChildAt(i);
this.measuredWidth = Math.max(this.measuredWidth, child.x + child.width);
this.measuredHeight = Math.max(this.measuredHeight, child.y + child.height);
}
}
Лично, когда это возможно, я стараюсь сделать все содержимое соответствующим подклассам UIComponent, а не создавать подобные хаки, чтобы заставить Sprite или другие не-UIComponent типы работать внутри контейнеров Flex. Тем не менее, ваш подход кажется очень распространенным, так что, надеюсь, он будет полезен вам и другим.