2009-06-25 109 views
9

如果我通过MXML创建输入字段,则可以将宽度设置为100%。但我似乎无法通过ActionScript在运行时执行此操作。在运行时将Flex组件宽度设置为100%?

这工作:

<mx:TextInput ... width="100%" /> 

这不会编译,说宽度是一个数字,而不是字符串:

var textinp:TextInput = new TextInput(); 
someContainer.addChild(textinp); 
textinp.width = "100%" 

如何设置100%在运行时通过创建一个组件的大小ActionScript中?

回答

21

您只需使用percentWidth属性,而不是width属性。

所以,在你的代码的第三行是:

textinp.percentWidth = 100; 

这绊倒了我一段时间了。

+0

谢谢,我知道它必须是简单的东西。我保证下次更仔细地研究文档,但有时很容易遗漏从基本UI类继承的东西。 – davr 2009-06-25 21:58:14

3

以上答案是正确的,但我不能评论它因为我太新了。

当你想添加此功能的自定义组件,你可以做这样的事情:

[PercentProxy("percentMultiplier")] 
public function set multiplier(value:Number):void 
{ 
    _multiplier = value; 
    invalidSomethingOrDoSomething(); 
} 

public function set percentMultiplier(value:Number):void 
{ 
    multiplier = value/100; 
} 

当然,当你这样做的宽度,集装箱子正在寻找percentWidth,并且不检查metada,所以不要叫它widthInPercent什么的,即使你可以。

1

下面是答案:

var textinp:TextInput = new TextInput(); 
someContainer.addChild(textinp); 
textinp.percentWidth = 100; 
10

如果以后要切换回基于像素的宽度为相同的组件,这里是你必须做的:

textinp.percentWidth = NaN;