2009-10-31 14 views
6

Il pulsante Flex standard non consente al testo dell'etichetta di avvolgere le parole. Ho letto su internet che ci sono alcuni modi non documentati per gestire questo, ma non li ho fatti funzionare. Se qualcuno potesse pubblicarmi un piccolo esempio sarebbe fantastico!Adobe Flex: Word Wrap nell'etichetta del pulsante

+0

Dovresti andare avanti e accettare la risposta di Christian Nunciato. – Panzercrisis

risposta

15

In sostanza è necessario impostare alcune proprietà protette sul controllo TextField del pulsante (multiLine e wordWrap), operazione che non si può fare senza estendere la classe Button. Quindi, se si crea una nuova classe che estende Button e imposta le proprietà e fa un po 'di lavoro per rendere le cose misurare in modo corretto:

package 
{ 
    import flash.text.TextFieldAutoSize; 
    import mx.controls.Button; 

    public class WrappingButton extends Button 
    { 


     public function WrappingButton() 
     { 
      super(); 
     } 

     override protected function createChildren():void 
     { 
      super.createChildren(); 

      textField.multiline = true; 
      textField.wordWrap = true; 
      textField.autoSize = TextFieldAutoSize.CENTER; 
     } 

     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
     { 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 
      textField.y = (this.height - textField.height) >> 1; 

      height = textField.height + getStyle("paddingTop") + getStyle("paddingBottom"); 
     } 
    } 
} 

... si può cadere che il controllo nel vostro MXML in questo modo:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> 

    <local:WrappingButton label="The quick brown fox jumped over the lazy dog." width="100" paddingTop="10" paddingBottom="10" /> 

</mx:Application> 

Spero che aiuti! Postback con domande se li hai.

+1

Grande componente, ma sto tentando di utilizzarlo come un renderer di elementi personalizzati e updateDisplayList() viene chiamato in un ciclo infinito. – Laramie

+0

Come posso utilizzare lo stesso componente in Flash Builder 4.6? Come ottengo errore su 'textField'" Accesso alla proprietà non definita " – abi1964

4

Cercando utilizzando &#13;

Sto usando

<s:Button label="Top two&#13;states result" height="100%" width="100%" icon="@Embed(source='assets/bar.png')" chromeColor="#A3F4FD"/> 

e lo fa un'etichetta su più righe.

+0

Impressionante, funziona come un incantesimo! – Ska