Многострочный текст в Flex не пересчитывается при изменении CSS во время выполнения

StackOverflow https://stackoverflow.com/questions/310729

  •  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% ошибочным подсчетом на динамических текстовых элементах управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top