Многострочный текст в Flex не пересчитывается при изменении CSS во время выполнения
-
10-07-2019 - |
Вопрос
Чтобы сократить время загрузки, я использую CSS-файл времени выполнения в своем приложении Flex.
У меня возникла проблема с многострочным текстовым элементом управления:
<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>
Когда моя таблица стилей CSS загрузилась, стиль текста меняется правильно, но высота не пересчитывается.Кажется, это всего лишь однострочное поле.
К вашему сведению:Элемент управления на самом деле не виден и активируется при наведении курсора мыши.Так что меня не волнует, если таблица стилей не загрузилась и они получили стандартный системный текст.Я просто хочу, чтобы при загрузке он был правильной высоты.
Решение
Для всех, у кого есть эта проблема, я нашел решение создать пользовательский компонент, расширяющий mx.controls.Text
, а затем переопределите метод styleChange () и явно вызовите метод invalidateDisplayList () для текстового поля после применения стиля.
Он должен вызываться автоматически при изменении стиля, но нет ... по какой-то причине в flex 3.5 это не так.
открытый класс TextObject расширяет Text {// ... переопределить открытую функцию styleChanged (styleProp: String): void {invalidateDisplayList (); } } Р>
Надеюсь, что спасу кого-нибудь все время, что я потерял на нем.
Другие советы
Согласно документации Adobe для текста
Изменение размера текстового элемента управления
Сгибает размеры управления текстом следующим образом:
Если вы указываете значение пикселя как для свойств высоты, так и для ширины, любой текст, превышающий размер управления, обрезается на границе.
Если вы указываете явную ширину пикселя, но без высоты, Flex завершает текст, чтобы соответствовать ширине, и вычисляет высоту, чтобы соответствовать требуемому количеству линий.
Если вы указываете процентную ширину и отсутствие высоты, Flex не обертывает текст, а высота равна количеству строк, определяемых количеством возвращаемых символов.
Если вы указываете только высоту и отсутствие ширины, значение высоты не влияет на расчет ширины и разбирается в управлении, чтобы соответствовать ширине максимальной линии.
Как правило, если у вас длинный текст, вы должны указать свойство на основе пикселей.Если текст может измениться, и вы хотите убедиться, что управление текстом всегда занимает одно и то же пространство в вашем приложении, установите явную высоту и свойства ширины, которые соответствуют наибольшему ожидаемому тексту.
Итак, трюк, который я использовал для решения этой проблемы, заключается в том, чтобы текст получал свою ширину через выражение привязки из любого контейнера, ограничивающего его ширину, обычно из непосредственного родителя.
например
<mx:Canvas id="box" width="100%" backgroundColor="Red">
<mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>
Не могли бы вы использовать фиксированную ширину пикселя вместо 100%? У меня были проблемы со 100% ошибочным подсчетом на динамических текстовых элементах управления.