Можно ли приостановить рисование для выполнения нескольких последовательных обновлений во Flex? - PullRequest
2 голосов
/ 03 ноября 2008

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

Когда выбрана дата или диапазон дат, мне нужно выделить этот диапазон. Это легко сделать, просматривая ячейки и переключая их стиль. [edit:] Однако, это, кажется, вызывает задержку, в течение которой ячейки сначала рисуются, как если бы имя стиля было пустым, а затем перерисовываются с правильным стилем, несмотря на то, что я никогда явно установить стиль на ноль - я чередую между "CalendarCell" и "CalendarCellSelected".

Если бы это были Windows Forms, я бы вызвал SuspendLayout для родительского контейнера, чтобы убедиться, что элементы управления перекрашиваются только после того, как я закончу обновления. Я хочу знать, существует ли подобное решение для Flex. Я бы хотел избежать рисования всего календаря, так сказать, вручную, если это вообще возможно.

edit: изменил описание проблемы, чтобы более точно отразить то, что я вижу.

Ответы [ 3 ]

1 голос
/ 03 ноября 2008

Вы вообще используете callLater ()?

Если вы используете callLater (), это может повлиять на ваши визуальные элементы, поскольку они объединяют изменения до тех пор, пока не потребуется нарисовать рамку или вы не заставите рисовать рамку с помощью validateNow () или подобного. Это может быть достаточно в вашем случае.

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

Является ли ваш календарь элементом управления UIComponent? Используются ли стандартные методы аннулирования, такие как commitProperties (), updateDisplayList () и т. Д.?

То, что вы, возможно, захотите сделать, это сохранить закрытый массив ячеек, для которых будут изменены их стили, но затем выполнить фактическое переключение стилей в переопределении commitProperties (). Я просто не уверен, что setStyle () запускает validateNow (), потому что мерцание немного удивительно.

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

Это может быть не совсем то, что вы ищете, но Дэвид Колетта из Adobe опубликовал видео, объясняющее EventCoalescer , которое они используют в Buzzword для отсрочки событий, которые обновляют определенные области пользовательского интерфейса приложения до пользователь прекратил перемещение точки вставки в тексте, например.

Этот пост в блоге Ханса Ван де Вельде также имеет аналогичное решение и реальный код для него.

...