Многострочный текст в Flex не пересчитывается при изменении CSS времени выполнения - PullRequest
0 голосов
/ 22 ноября 2008

Из соображений времени загрузки я использую файл CSS времени выполнения в своем приложении Flex.

У меня проблема с многострочным текстовым управлением:

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

Когда моя таблица стилей CSS загружена, стиль текста корректно изменяется, но высота не пересчитывается. Кажется, это просто однострочное поле.

К вашему сведению: элемент управления фактически не виден и активируется при опрокидывании. Поэтому меня не волнует, не загружена ли таблица стилей, и они получают стандартный системный текст. Я хочу, чтобы она была правильной высоты, когда она была загружена.

Ответы [ 3 ]

3 голосов
/ 11 июля 2009

В соответствии с документацией Adobe для текста

Изменение размера текстового элемента управления

Гибкие размеры Текст управления следующим образом:

Если указать значение пикселя для обоих свойства высоты и ширины, любые текст, который превышает размер контроль обрезается на границе.

Если вы укажете явный пиксель ширина, но не высота, Flex оборачивает текст, чтобы соответствовать ширине и вычисляет высота под нужное количество линий.

Если вы укажете в процентах ширина и высота нет, Flex не обернуть текст, и высота равна количество строк, как определено количество возвращаемых символов.

Если указать только высоту и нет ширина, значение высоты не влияет на расчет ширины, а Flex размеры элемента управления, чтобы соответствовать ширине максимальная линия.

Как правило, если вы долго текст, вы должны указать на основе пикселей свойство ширины. Если текст может изменить, и вы хотите, чтобы Контроль текста всегда занимает одно и то же пространство в вашем приложении, установите явные свойства высоты и ширины которые соответствуют наибольшему ожидаемому тексту.

Таким образом, уловка, с которой я имел дело, заключается в том, чтобы Text получал свою ширину через выражение привязки из любого контейнера, ограничивающего его ширину, обычно непосредственного родителя.

, например

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>
1 голос
/ 17 июня 2010

Для всех, у кого есть эта проблема, я нашел решение создать пользовательский компонент, расширяющий mx.controls.Text

, а затем переопределите метод styleChange () и явно вызовите метод invalidateDisplayList () для текстового поля после применения стиля.

Он должен вызываться автоматически при изменении стиля, но нет ... по какой-то причине в flex 3.5 это не так.

открытый класс TextObject extends Text {// ... переопределить открытую функцию styleChanged (styleProp: String): void {invalidateDisplayList (); } }

Надеюсь, что спасу кого-нибудь все время, что я потерял на нем.

0 голосов
/ 22 ноября 2008

Не могли бы вы использовать фиксированную ширину пикселя вместо 100%? У меня были проблемы со 100% ошибочным подсчетом на динамических текстовых элементах управления.

...