Flex benutzerdefinierten Elementrenderer für den angezeigten Eintrag in der combobox
Ich bin mit einem benutzerdefinierten Elementrenderer in einer combobox anzeigen, um eine benutzerdefinierte Zeichnung anstelle des Standard-text-label.
Dies funktioniert gut für die dropdown-Liste, aber die angezeigte Position ( wenn die Liste geschlossen ist) ist immer noch die textuelle Repräsentation des Objekts.
Gibt es eine Möglichkeit, die angezeigten Artikel machte die gleiche Weise wie die in der dropdown -?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig ist dies nicht möglich. Wenn Sie jedoch verlängern ComboBox können Sie diese Funktionalität hinzufügen, leicht. Hier ist ein kurzes Beispiel, es ist eine Rohfassung und muss wahrscheinlich testen /optimieren, aber es zeigt, wie könnten Sie dies erreichen.
Ich habe versucht, die obige Lösung, aber festgestellt, dass die selectedItem nicht angezeigt, wenn die combobox geschlossen wurde. Eine zusätzliche Zeile code war erforderlich, binden Sie die itemRenderer-Eigenschaft data die selectedItem:
Habe ich verlängert Dane ' s code ein bisschen weiter. In einigen Fällen Klick nicht öffnen Sie die drop-box mit meinem renderer, und ich bemerkte, dass das normale Flex-ComboBox-skins nicht ausgelöst. So in replaceTextInput() ich Hinzugefügt einige zusätzliche event-Listener, und speichern Sie einen Verweis auf das ComboBox-Taste dient zum anzeigen der skins. Nun verhält es sich genauso wie bei den normalen ComboBox.
Hier der code:
Danke maclema und Maurits de Boer. Ich habe ein paar mehr Dinge, die zu dieser Klasse zu machen, die zu meinen Anforderungen passen:
Ich überschrieb set itemRenderer, so dass dies funktioniert, wenn Sie die itemRenderer-durch ALS, anstatt mxml. Ich zog den text-Eingabe-Ersatz-code auf seine eigene Funktion, um Doppelarbeit zu vermeiden.
Ich Hinzugefügt setter für 'increaseW' und 'increaseH', um die Größe der combobox, wenn notwendig, weil mein renderer war zu groß für die combobox auf den ersten.
Ich abgezogen 25 aus der textInputReplacement Breite, so dass es nicht immer überlappen Sie die dropdown-button... besser etwas mehr proportional zu beherbergen verschiedene skins und so.
Code:
War ich auf der Suche nach einem Weg, dies zu tun, verwenden die Spark-ComboBox-Komponente.
Dieser thread war sehr nützlich für mich, aber bisher gab es nur Antworten, wie, es zu tun mit einer mx:ComboBox. Ich dachte, ich sollte anfügen, meine Antwort, wie es zu tun mit einer spark-ComboBox-Komponente.
Dies ist, was die Haut Aussehen würde:
Mit der Spark-ComboBox-Komponente in diesem Prozess ist sehr einfach und erfordert Sie nicht zu verlängern ComboBox.
Fand ich einen einfacheren Weg der änderung der renderer für das ausgewählte element. Das eine funktioniert nur, wenn ein element erbt von der
TextInput
- Klasse in Flex 4.0 oder höher.In Flex-v4.5, in
ComboBase.createChildren
in Zeile 1177, Sie werden feststellen, dass die Klasse definierbare für dietextInput
übergeben werden kann, verwenden Sie die style-TastetextInputClass
:Ändern Sie einfach den Wert dieses Schlüssels in den Konstruktor von Ihrer combo und jetzt haben Sie Ihre eigene renderer für die
selectedItem
.Schließlich müssen Sie binden die
data
- Eigenschaft, um dieselectedItem
Eigenschaft in der combo, um Daten zu erhalten angezeigt.