Frage

Aus Gründen der Ladezeit verwende ich in meiner Flex-Anwendung eine Laufzeit-CSS-Datei.

Ich habe ein Problem mit einem mehrzeiligen Textsteuerelement:

<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>

Wenn mein CSS-Stylesheet geladen wurde, ändert sich der Textstil korrekt, die Höhe wird jedoch nicht neu berechnet.Es scheint nur ein einzeiliges Feld zu sein.

Zu Ihrer Information:Das Steuerelement ist nicht wirklich sichtbar und wird durch einen Rollover ausgelöst.Es ist mir also egal, ob das Stylesheet nicht geladen wurde und sie Standardsystemtext erhalten.Ich möchte nur, dass es nach dem Beladen die richtige Höhe hat.

War es hilfreich?

Lösung

Für alle anderen, der dieses Problem hat, die Lösung, die ich fand, war eine eigene Komponente zu erstellen, um die mx.controls.Text erstreckt

und dann überschreibt die Stylechange () Methode und explizit den invalidateDisplayList () -Methode für das Textfeld aufrufen, wenn der Stil angewandt wurde.

Es sollte automatisch aufgerufen werden, wenn der styleis geändert, aber nicht ... aus irgendeinem Grunde in Flex 3.5 ist es nicht.

public class Textobjekt erweitert Text {// ... außer Kraft setzen public function stylechanged (styleProp: String): void {invalidateDisplayList (); } }

Hoffnung, dass jemand die ganze Zeit ich es verloren zu speichern.

Andere Tipps

Gemäß der Adobe-Dokumentation für Text

Größe eines Textsteuerelements anpassen

Flex werden die Textsteuerung wie folgt:

Wenn Sie einen Pixelwert sowohl für die Höhe als auch für die Breite angeben, wird jeder Text, der die Größe des Steuerelements überschreitet, am Rand abgeschnitten.

Wenn Sie eine explizite Pixelbreite angeben, aber keine Höhe, füllt der Flex den Text in die Breite und berechnet die Höhe für die erforderliche Anzahl von Linien.

Wenn Sie eine prozentuale Breite und keine Höhe angeben, wickelt Flex den Text nicht ein und die Höhe entspricht der Anzahl der Zeilen, die durch die Anzahl der Rückgabebereitungen bestimmt werden.

Wenn Sie nur eine Höhe und keine Breite angeben, wirkt sich der Höhenwert nicht auf die Breitenberechnung aus und biegt die Steuerung an, die die Breite der maximalen Linie entspricht.

Wenn Sie einen langen Text haben, sollten Sie in der Regel eine Pixel-basierte Breite angeben.Wenn sich der Text ändern kann und Sie sicherstellen möchten, dass die Textsteuerung in Ihrer Anwendung immer denselben Speicherplatz einnimmt, setzen Sie explizite Höhe und Breiteneigenschaften, die zum größten erwarteten Text passen.

Der Trick, den ich verwendet habe, um damit umzugehen, besteht darin, dass der Text seine Breite über einen Bindungsausdruck von dem Container erhält, der seine Breite begrenzt, normalerweise vom unmittelbaren übergeordneten Element.

z.B.

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>

Könnten Sie eine feste Pixelbreite anstelle von 100% verwenden? Ich habe Probleme hatte mit 100% falsch, bevor sie auf dynamische Text Kontrollen berechnet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top