2009-10-31 7 views
6

El botón Flex estándar no permite que el Texto de etiqueta se ajuste a la palabra. Leí en Internet que hay formas indocumentadas de manejar esto, pero no conseguí que funcionaran. ¡Si alguien pudiera enviarme un pequeño ejemplo sería genial!Adobe Flex: alineación de palabras en la etiqueta de botón

+0

Debería seguir adelante y aceptar la respuesta de Christian Nunciato. – Panzercrisis

Respuesta

15

Esencialmente necesita establecer algunas propiedades protegidas en el control TextField del botón (multiLine y wordWrap), que no puede hacer sin extender la clase Button. Así que si se crea una nueva clase que se extiende Button y establece las propiedades y hace un poco de trabajo para hacer las cosas de manera correcta miden:

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"); 
     } 
    } 
} 

... Usted puede dejar que el control en su MXML de este 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> 

Espero que ayude! Publique con preguntas si las tiene.

+1

Gran componente, pero estoy intentando usarlo como un procesador de elementos personalizado, y updateDisplayList() se llama en un bucle infinito. – Laramie

+0

¿Cómo puedo usar el mismo componente en Flash Builder 4.6? Como recibo un error en 'textField'" Acceso a la propiedad indefinida " – abi1964

4

Tratando usando &#13;

estoy usando

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

y lo hace etiqueta de varias líneas.

+0

¡Impresionante, funciona como un encanto! – Ska

Cuestiones relacionadas