Flex personnalisée de rendu d'élément de l'élément affiché dans la zone de liste déroulante
Je suis en utilisant un custom rendu d'élément dans une liste déroulante pour afficher un dessin personnalisé au lieu de la valeur par défaut du texte de l'étiquette.
Cela fonctionne très bien pour la liste déroulante, mais l'élément affiché ( lorsque la liste est fermé) est toujours la représentation textuelle de mon objet.
Est-il un moyen d'avoir l'élément affiché rendus de la même façon que l'un dans la liste déroulante?
OriginalL'auteur pbreault | 2008-11-06
Vous devez vous connecter pour publier un commentaire.
Par défaut, vous ne pouvez pas faire cela. Toutefois, si vous étendez la zone de liste déroulante, vous pouvez ajouter cette fonctionnalité facilement. Voici un exemple rapide, c'est une ébauche de la version et probablement des besoins de tests et de peaufinage, mais il montre comment vous pourriez faire cela.
OriginalL'auteur Matt MacLean
J'ai essayé la solution ci-dessus, mais a constaté que la selectedItem ne s'affiche pas lorsque la zone de liste déroulante a été fermé. Une ligne supplémentaire de code était nécessaire de lier la itemRenderer de données à la propriété selectedItem:
OriginalL'auteur Maurits de Boer
Je l'ai étendu son code un peu plus loin. Dans certains cas, en cliquant sur n'a pas ouvert la boîte de dépôt avec mon moteur de rendu et j'ai remarqué que la normale Flex zone de liste déroulante peaux ne se déclenche pas. Ainsi, dans replaceTextInput() j'ai ajouté quelques autres écouteurs d'événements et d'enregistrer une référence à la zone de liste déroulante du bouton utilisé pour afficher les peaux. Maintenant, il se comporte exactement comme la normale zone de liste déroulante.
Voici le code:
OriginalL'auteur John
Merci maclema et Maurits de Boer. J'ai ajouté un couple de choses à cette classe pour l'adapter à mes besoins:
J'ai remplacé ensemble itemRenderer de sorte que cela ne fonctionnera que si vous définissez la itemRenderer à travers au lieu de mxml. J'ai déplacé la saisie de texte code de remplacement à sa propre fonction pour éviter les doubles emplois.
J'ai ajouté des setters pour "increaseW" et "increaseH" pour redimensionner la zone de liste déroulante, si nécessaire, parce que mon moteur de rendu était trop grand pour la zone de liste déroulante au premier.
Je soustrait 25 de la textInputReplacement largeur afin de ne pas se chevaucher sur le bouton de la liste déroulante... peut être préférable d'utiliser quelque chose de plus proportionnelle à accueillir les différents skins et autres.
Code:
OriginalL'auteur Dane
Je cherchais un moyen de faire cela à l'aide de l'Étincelle zone de liste déroulante.
Ce fil a été très utile pour moi, mais jusqu'à présent, seules des réponses sur la façon de le faire en utilisant un mx:zone de liste déroulante. J'ai pensé que je devrais ajouter ma réponse sur la façon de le faire à l'aide d'une étincelle zone de liste déroulante.
C'est ce que la peau ressemblerait à:
Avec l'Étincelle ComboBox ce processus est très facile et ne vous obligent pas à étendre la zone de liste déroulante.
OriginalL'auteur sixtyfootersdude
J'ai trouvé un moyen plus facile de changer le moteur de rendu pour l'élément sélectionné. Cette une ne fonctionne que si votre élément hérite de la
TextInput
classe, dans Flex 4.0 ou supérieur.Dans Flex v4.5, dans
ComboBase.createChildren
à la ligne 1177, vous trouverez que la classe définissables pour latextInput
peut être transmis à l'aide de la touche styletextInputClass
:Il suffit de changer la valeur de cette clé dans le constructeur de votre combo et maintenant vous avez votre propre moteur de rendu pour le
selectedItem
.Enfin, vous devez lier le
data
propriété de laselectedItem
propriété dans votre combo afin d'obtenir des données affichées.OriginalL'auteur Paulo Enmanuel