Хранение детей фиксированного размера - PullRequest
0 голосов
/ 19 июля 2011

У меня есть следующие настройки:

<mx:Canvas>
 <mx:ViewStack width="800" height="600">

  <mx:Canvas width="100%" height="100%">
   <s:BorderContainer width="100%" height="100%">
    <mx:Canvas x="80" y="46" width="640" height="480">
      <custom:CustomComponent width="640" height="480" />
    </mx:Canvas>
   </s:BorderContainer>
  </mx:Canvas>

 </mx:ViewStack>
</mx:Canvas>

<custom:CustomComponent /> - это то, что я не могу изменить.Это то, что показывает видео.Однако по какой-то причине что-то (контейнер, я полагаю) получает размер 800 x 600.Так что я получаю полосы прокрутки внутри <custom:CustomCompnent />.

. Есть ли способ заставить всех дочерних элементов определенного контейнера не выходить за пределы определенной ширины / высоты.

1 Ответ

2 голосов
/ 19 июля 2011

Вы можете просто переопределить метод addChildAt () вашего пользовательского контейнера.(это также охватывает метод addChild (), потому что addChild () вызывает addChildAt ()).Там вы можете проверить ширину и высоту и добавить changeWatchers, чтобы проверять каждый раз, когда ширина / высота компонента изменяется.Изменения должны использоваться, потому что DisplayObject не имеет свойства maxWidth / maxHeight (иначе это было бы еще проще).

override public function addChildAt(child:DisplayObject, index:int):DisplayObject
{
    super.addChildAt(child, index);

    if(child.width > 640)child.width = 640;
    if(child.height > 480)child.height = 480;

    ChangeWatcher.watch(child, "width", function():void{child.width = (child.width > 640) ? 640 : child.width;});
    ChangeWatcher.watch(child, "height", function():void{child.height = (child.height > 480) ? 480 : child.height;});
}

РЕДАКТИРОВАТЬ

Когда вы хотитечтобы использовать этот код, просто создайте новый класс, который расширяет класс Canvas, например:

package com
{
    import mx.containers.Canvas

    public class CustomCanvas extends Canvas
    {
        public function CustomCanvas():void
        {
            super();
        }

        override public function addChildAt(child:DisplayObject, index:int):DisplayObject
        {
            super.addChildAt(child, index);

            if(child.width > 640)child.width = 640;
            if(child.height > 480)child.height = 480;

            ChangeWatcher.watch(child, "width", function():void{child.width = (child.width > 640) ? 640 : child.width;});
            ChangeWatcher.watch(child, "height", function():void{child.height = (child.height > 480) ? 480 : child.height;});
        }
    }
}

Чтобы затем добавить это с помощью простого mxml, вы можете просто сделать что-то вроде этого.Это будет иметь все функциональные возможности, которые имел бы Canvas, расширенный вашей собственной adchild () - функциональностью.

<com:CustomCanvas someproperty="somevalue"></com:CustomCanvas>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...