Как я могу центрировать titleicon на панели Flex 3? - PullRequest
1 голос
/ 27 мая 2011

Как мне отцентрировать заголовок на панели Flex 3?Заголовок центрируется, но заголовок расположен слева от панели.

<mx:Panel  
    title="{myTitle}"    
    textAlign="center"
    titleStyleName="panelTitle" 
    titleIcon="{myIcon}"
    >   


.panelTitle {
    font-size: 14;
    fontFamily: "Lucida Grande";
}   

РЕДАКТИРОВАТЬ: Я пытаюсь заставить предложение www.flextras.com работать.Вот что я получил:

package com.mysite.components
{
    import mx.containers.Panel;

    public class CenterTitleIconPanel extends Panel
    {

        override protected function layoutChrome(unscaledWidth:Number, unscaledHeight:Number):void {
            super.layoutChrome(unscaledWidth,unscaledHeight);
                if (titleIconObject)
                {
                    titleIconObject.move((unscaledWidth-titleIconObject.width)/2,(unscaledHeight-titleIconObject.height)/2);
                }
        }


        public function CenterTitleIconPanel()
        {
            super();
        }

    }
}

Но я получаю сообщение об ошибке 1178:

1178: Попытка доступа к недоступному свойству titleIconObject через ссылку со статическим типом com.mysite.components: CenterTitleIconPanel.

Есть предложения?Спасибо.

1 Ответ

3 голосов
/ 27 мая 2011

Расширьте компонент и переопределите метод layoutChrome, чтобы изменить положение titleIcon.

Примерно так:

override protected function layoutChrome(unscaledWidth:Number,
                                             unscaledHeight:Number):void{
 super.layoutChrone(unscaledWidth,unscaledHeight);
            if (titleIconObject)
            {
                titleIconObject.move((unscaledWidth-titleIconObject.width)/2,(unscaledHeight-titleIconObject.height)/2);
            }
 }

Я, в основном, беру unscaledWidth компонента, вычитая ширину titleIconObject, а затем разрезаю это значение пополам, чтобы получить позицию X компонента.

Тогда я использую тот же подход для высоты.

Поскольку titleIconObject позиционируется с использованием аналогичного подхода, я сомневаюсь, что есть стили, которые будут влиять на позиционирование. * * 1010


Проблема, с которой вы столкнулись при попытке, заключается в том, что titleIconObject помещается в пользовательское пространство имен mx_internal. Это немного чёрной магии со стороны команды Flex. Но чтобы получить доступ к свойству в этом пользовательском пространстве имен, вы должны импортировать пространство имен и использовать его. Этот обновленный код должен работать:

package com.mysite.components
{
    import mx.containers.Panel;
    import mx.core.mx_internal;    

    use namespace mx_internal;
    public class CenterTitleIconPanel extends Panel
    {

        override protected function layoutChrome(unscaledWidth:Number, unscaledHeight:Number):void {
            super.layoutChrome(unscaledWidth,unscaledHeight);
                if (titleIconObject)
                {
                    titleIconObject.move((unscaledWidth-titleIconObject.width)/2,(unscaledHeight-titleIconObject.height)/2);
                }
        }


        public function CenterTitleIconPanel()
        {
            super();
        }

    }
}

mx_internal - это то место, где все, что Flex Team не хочет документировать, отправляется жить (или умирать).

...