Flex中的多行文本在运行时css更改时不会重新计算

时间:2008-11-22 02:03:45

标签: flex runtime stylesheet

对于加载时间考虑,我在Flex应用程序中使用运行时css文件。

我遇到多行文字控件的问题:

<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>

当我的CSS样式表加载后文本样式正确更改,但不重新计算高度。它似乎只是一个单行字段。

仅供参考:控件实际上不可见,并且由翻转触发。所以我真的不在乎样式表是否已经加载并且它们获得标准系统文本。我jsut希望它在加载时是正确的高度。

3 个答案:

答案 0 :(得分:3)

根据文档

的Adobe文档
  

调整文本控件的大小

     

Flex尺寸   文本控制如下:

     

如果为两者指定像素值   高度和宽度属性,任何   超过大小的文本   控件被裁剪在边框处。

     

如果指定显式像素   宽度,但没有高度,Flex包裹   文本以适应宽度并计算   适合所需数量的高度   线条。

     

如果指定基于百分比   宽度没有高度,Flex没有   包装文本,高度等于   由...确定的行数   返回字符数。

     

如果您只指定一个高度而没有   宽度,高度值不   影响宽度计算和Flex   调整控件的大小以适应宽度   最大线。

     

作为一般规则,如果你有很长时间   文字,你应该指定一个基于像素   宽度属性。如果文字可能   改变,你想确保   文本控制总是占用相同的   应用程序中的空间,设置   显式高度和宽度属性   这符合最大的预期文本。

所以我用来解决这个问题的方法就是让Text通过任何容器限制宽度的绑定表达式获得宽度,通常是直接父级。

e.g。

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>

答案 1 :(得分:1)

对于遇到此问题的任何其他人,我找到的解决方案是创建一个扩展mx.controls.Text的自定义组件

然后重写styleChange()方法,并在应用样式后显式调用textate字段的invalidateDisplayList()方法。

当样式发生变化时应该自动调用它,但是由于某些原因,在flex 3.5中它不会被调用。

public class TextObject extends Text {// ... override public function styleChanged(styleProp:String):void {invalidateDisplayList(); } }

希望在我丢失的时候保存一些。

答案 2 :(得分:0)

您可以使用固定像素宽度而不是100%吗?我以前在动态文本控件上错误地计算了100%的问题。