2009-10-31 2 views
6

Стандартная кнопка Flex не позволяет переносить текст этикетки на слово. Я читал в Интернете, что есть некоторые недокументированные способы справиться с этим, но я не заставил их работать. Если бы кто-нибудь мог написать мне небольшой пример, это было бы здорово!Adobe Flex: Word Wrap in Button Label

+0

Вы должны идти дальше и принять ответ Кристиана Нунциато. – Panzercrisis

ответ

15

По существу вам необходимо установить несколько защищенных свойств элемента управления TextField Button (multiLine и wordWrap), чего вы не можете обойти без расширения класса Button. Так что, если вы создаете новый класс, который расширяет Button и устанавливает эти свойства и не мало работы, чтобы сделать вещи правильно отмерить:

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

... вы можете оставить этот контроль в ваш MXML следующим образом:

<?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> 

Надеюсь, это поможет! Отправьте ответ с вопросами, если у вас их есть.

+1

Отличный компонент, но я пытаюсь использовать его в качестве настраиваемого средства визуализации элементов, а updateDisplayList() вызывается в бесконечном цикле. – Laramie

+0

Как я могу использовать один и тот же компонент в Flash Builder 4.6? Поскольку я получаю ошибку на 'textField'« Доступ к неопределенному свойству » – abi1964

4

Попытка использования &#13;

Я использую

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

и делает ярлык многострочный.

+0

Удивительный, работает как шарм! – Ska