Flex: Benutzerdefinierte Elementrenderer Für Combobox-Steuerelemente schneidet text
Habe ich einen benutzerdefinierten Elementrenderer implementiert, die ich mit einem Kombinationsfeld auf ein flex-Projekt, die ich arbeite. Es zeigt und ein Symbol und einen text für jedes Element. Das problem ist nur, dass wenn der text lang ist die Breite des Menüs ist nicht richtig eingestellt und der text ist abgeschnitten, wenn Sie angezeigt werden. Ich habe versucht, tweaking all den offensichtlichen Eigenschaften, dieses problem zu lindern, aber habe nicht hatte keinen Erfolg. Weiß jemand, wie man die combobox-Menü Breite skaliert werden, um welche Daten es ist rendering?
Meine benutzerdefinierte Elementrenderer Umsetzung:
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
styleName="plain" horizontalScrollPolicy="off">
<mx:Image source="{data.icon}" />
<mx:Label text="{data.label}" fontSize="11" fontWeight="bold" truncateToFit="false"/>
</mx:HBox>
Und meine combobox-Komponente verwendet es so:
<mx:ComboBox id="quicklinksMenu" change="quicklinkHandler(quicklinksMenu.selectedItem.data);" click="event.stopImmediatePropagation();" itemRenderer="renderers.QuickLinkItemRenderer" width="100%"/>
BEARBEITEN:
Ich sollte klären, auf die Sache: ich kann die dropdownWidth-Eigenschaft der combobox auf einige willkürlich großen Wert - das wird alles passen, aber es wird zu breit. Da die angezeigten Daten in dieser combobox ist generisch, ich möchte das er die Größe automatisch selbst, um das größte element im dataprovider (der flex-Dokumentation sagt, dass es dies tun wird, aber ich habe das Gefühl, mein benutzerdefinierten Elementrenderer ist irgendwie zu brechen, Verhalten)
InformationsquelleAutor sgibbons | 2008-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur ein zufälliger Gedanke (keine Ahnung ob das hilft):
Versuchen Sie, die Einstellung der Eltern HBox und die Label-breiten bis 100%. Das ist in der Regel fest Probleme ich habe laufen in ähnlich waren.
InformationsquelleAutor Herms
Haben Sie versucht, mit dem calculatePreferredSizeFromData() Methode?
InformationsquelleAutor defmeta
Diese Antwort ist wahrscheinlich zu spät, aber ich hatte ein sehr ähnliches problem mit der DataGrid-Spaltenbreite.
Nach viel noodling, habe ich beschlossen, pre-render meinen text in eine private TextField, Holen Sie sich die Breite des gerenderten text aus, und explizit gesetzt, wird die Breite der Spalte auf die entsprechenden Größe Typ Veranstaltungen. Ein wenig hack-y, aber Sie funktioniert gut genug, wenn Sie nicht haben eine Menge von Daten, die sich ändern.
InformationsquelleAutor Aaron H.
Müssen Sie zwei Dinge tun:
mx.controls.Text
(unterstützt Textumbruch) statt mx.controls.LabeldropdownFactory.variableRowHeight=true
-- dieser dropdownFactory ist normalerweise eine Unterklasse von List, und die itemRenderer-Sie setzen auf ComboBox ist, was wird verwendet, um das Rendern jedes Elements in der ListeUnd nicht explizit festlegen
comboBox.dropdownWidth
-- lassen Sie den Standardwert voncomboBox.widt
h verwendet werden dropdown-Breite.InformationsquelleAutor Mario Ruggier
Wenn man sich die
measure
Methode dermx.controls.ComboBase
, werden Sie sehen, dass die comboBox berechnet esmeasuredMinWidth
als Summe die Breite des Texts und die Breite der comboBox-Taste.Den
calculatePreferredSizeFromData
Methode erwähnt von @defmeta (implementiert inmx.controls.ComboBox
) wird davon ausgegangen, dass die Daten-renderer ist nur ein text-Feld, und nutztflash.text.lineMetrics
zur Berechnung der Breite des Textes aus dem label-Feld in derdata
Objekt. Wenn Sie möchten, fügen Sie eine zusätzliche visuelle element, das Element-renderer und dieComboBox
nehmen, es ist eine Größe in der Berücksichtigung bei der Berechnung der eigenen Größe, Sie haben zu erweitern diemx.controls.ComboBox
- Klasse und überschreiben Sie diecalculatePreferredSizeFromData
Methode etwa so:Wenn möglich, speichern Sie die Bild-Dimensionen in den Daten-Objekt, und verwenden Sie diese Werte als
imgH
undimgW
sind, wird die Dimensionierung wesentlich vereinfacht.EDIT:
Wenn Sie das hinzufügen von Elementen zu den Rendern, die, abgesehen von einem Bild, das wie ein Etikett, Sie auch haben zu berechnen, Ihre Größe als auch beim Durchlaufen der Datenelemente, und diese Dimensionen berücksichtigen bei der Berechnung
maxH
undmaxW
.InformationsquelleAutor Ryan Lynch