Flex3 Canvas, ScrollBar - PullRequest
       10

Flex3 Canvas, ScrollBar

0 голосов
/ 13 марта 2009

Я хотел бы добавить «простой» Sprite в flex Canvas. Я делаю это:

var uic:UIComponent=new UIComponent;
var s:Sprite=new Sprite(); //<-- my simple Sprite
uic.addChild(s);

myCanvas.addChild(uic);

Sprite правильно добавлено к Canvas, но теперь мне нужно активировать Canvas ScrollBar в зависимости от размера Sprite (холст имеет фиксированный размер)

Любые идеи приветствуются,

Спасибо

1 Ответ

4 голосов
/ 13 марта 2009

Проблема, которую вы обнаружили, заключается в том, что обычный 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. Тем не менее, ваш подход кажется очень распространенным, так что, надеюсь, он будет полезен вам и другим.

...