2009-09-08 116 views
0

我创建了一个动态添加一个VBox,它包含两个图像。导入从UIComponent派生的自定义组件。问题是包含这两个图像的Vbox只有很小的尺寸。我想VBox延伸到两个图像的大小。Flex动态创建的组件添加到自定义组件

这是我如何创建VBOX ....

var open:Image = new Image(); 
open.source = 'assets/icons/open.png'; 

var save:Image = new Image(); 
save.source = 'assets/icons/save.png'; 

var box:VBox = new VBox(); 
box.addChild(open); 
box.addChild(save); 

该组件是这样的....

public class MyComponent extends UIComponent 

我的垂直框分配给(这是在creationComplete事件之后)

public function set VBoxOptions(value:UIComponent) : void { 
      if(_vBoxOptions){ 
       removeChild(_vBoxOptions); 
      } 
      _vBoxOptions = value; 
      addChild(_vBoxOptions); 
      invalidateSize(); 
     } 

在更新显示列表我做..

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { 
    if(_hoverOptions) 
    { 
     _hoverOptions.move(unscaledWidth+2,2); //please note this is not the problem, 
    } 
} 

感谢提前帮助...

回答

0

你需要扩展UIComponent,因为画布是会得到你在那里更快:

package 
{ 
    import flash.events.Event; 

    import mx.containers.Canvas; 
    import mx.core.UIComponent; 

    public class MyUIComponent extends Canvas 
    { 
     private var _vBoxOptions:UIComponent; 

     public function MyUIComponent() 
     { 
      super(); 
     } 

     public function set vBoxOptions(value:UIComponent):void 
     { 
      if(_vBoxOptions && this.contains(_vBoxOptions)) 
      { 
       this.removeChild(_vBoxOptions); 
      } 

      _vBoxOptions = value; 
      _vBoxOptions.validateNow(); 

      this.addChild(_vBoxOptions); 
     } 
    } 
} 
+0

嗨,我不知道我是否可以。但无论如何,我仍然想知道问题是什么? – rid00z 2009-09-09 00:57:22

+0

画布会动态调整其内容(VBox也会)。 UIComponent不会调整其内容。它是一个外壳。在这种情况下,它似乎根本没有调整大小。这就是为什么组件在放置在Canvas中时按预期显示的原因。除非你有对UIComponent的特定需求,否则就使用Canvas。 – 2009-09-09 01:30:12