Puis-je suspendre le dessin pour effectuer plusieurs mises à jour successives dans Flex?

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

  •  06-07-2019
  •  | 
  •  

Question

J'ai écrit un simple contrôle de calendrier pour permettre de sélectionner des jours, des semaines, des mois, etc. La simplicité vient du fait que je ne dessine pas vraiment moi-même, choisissant plutôt de créer un tas de boîtes et d’étiquettes qui serviraient de cellules de date pour le calendrier.

Quand une date ou une plage de dates est sélectionnée, je dois mettre cette plage en surbrillance. Cela se fait facilement en parcourant les cellules et en changeant leur style. [edit:] Cela semble toutefois provoquer un délai au cours duquel les cellules sont tout d'abord dessinées comme si le nom du style était vide, puis redessinées avec le style correct, malgré le fait que je n'ai jamais Définissez explicitement le style sur null - Je permute entre " CalendarCell " et "CalendarCellSelected".

S'il s'agissait de Windows Forms, j'appellerais SuspendLayout sur le conteneur parent pour vérifier que les contrôles sont repeints uniquement une fois les mises à jour terminées. Ce que je cherche à savoir, c'est s'il existe ou non une solution similaire pour Flex. J'aimerais éviter de dessiner tout le calendrier "manuellement", pour ainsi dire, si cela est possible.

modifier: la description du problème a été modifiée pour refléter plus précisément ce que je vois.

Était-ce utile?

La solution

Votre calendrier contrôle-t-il un composant UIComponent? Utilise-t-il les méthodes d'invalidation standard telles que commitProperties (), updateDisplayList (), etc.?

Ce que vous voudrez peut-être faire est de conserver un tableau privé des cellules dont les styles seront modifiés, puis de changer de style dans le remplacement de commitProperties (). Je ne suis pas sûr que setStyle () déclenche un validateNow (), car le scintillement est un peu surprenant.

Autres conseils

Utilisez-vous callLater () du tout?

Si vous utilisez callLater (), cela peut imposer vos effets visuels au fur et à mesure que les modifications sont apportées jusqu’à ce qu’il ait besoin de dessiner un cadre ou que vous forçiez un dessin avec validateNow () ou similaire. Cela pourrait suffire dans votre cas.

Ce n'est peut-être pas exactement ce que vous recherchez, mais David Coletta chez Adobe a publié un a vidéo expliquant un EventCoalescer qu’il utilise dans Buzzword pour différer des événements mettant à jour des zones spécifiques de l’interface utilisateur de l’application jusqu’à ce que l’utilisateur arrête de déplacer le point d’insertion dans le texte, par exemple.

Ce billet de blog de Hans Van de Velde propose également une solution similaire, et le code réel pour cela aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top