2008-11-22 23 views
0

对于加载时间的考虑,我在我的Flex应用程序中使用运行时css文件。Flex中的多行文本在运行时css被更改时不会重新计算

我有一个多行文本控件的一个问题:

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

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

仅供参考:该控件实际上并不可见,并且由滚动触发。所以我真的不在乎如果样式表没有加载,他们得到标准的系统文本。我只是希望它在被加载时是正确的高度。

回答

1

对于任何其他谁有这个问题,我找到的解决方案是创建一个自定义组件扩展mx.controls。文本

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

它应该在styleis改变时自动调用,但没有......由于某些原因,在flex 3.5中它不是。公共类TextObject扩展文本{// ... 覆盖公共职能styleChanged(styleProp:String):void {invalidateDisplayList(); } }

希望能够在我失去的时候保存一些。

0

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

+0

我应该提到我已经试过了,但是没有这个没有修复它自己:-( – 2008-11-23 05:34:14

3

每Adobe的文档文本

浆纱文本控件

的Flex尺寸的 文本控件如下:

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

如果指定一个明确的像素宽度 ,但没有高度,软硬包装了 文本以适应宽度,并计算 的高度,以适应线的所需数量 。

如果指定了一个基于百分比 宽度和高度没有,Flex不会 自动换行,并高度等于 如通过 的返回字符的数量确定的行数。

如果只指定一个高度,没有 宽度,高度值不 影响宽度计算,和Flex 尺寸以适应 最大线宽度控制。

作为一般规则,如果您有长文本 ,则应指定基于像素的 宽度属性。如果文本可能 发生更改,并且您希望确保 文本控件始终占用应用程序中相同的 空间,请将 明确的高度和宽度属性 设置为符合最大预期文本。

所以我用来处理这个问题的诀窍是让Text通过绑定表达式从任何容器限制它的宽度(通常是直接父级)获取其宽度。

例如

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

这听起来是对的。 – 2009-07-11 01:20:28