如何将titleicon置于Flex 3面板中心?

时间:2011-05-27 19:01:42

标签: flex panel title

如何将titleicon置于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通过a   静态类型的引用   com.mysite.components:CenterTitleIconPanel

有什么建议吗?谢谢。

1 个答案:

答案 0 :(得分:3)

扩展组件并覆盖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使用类似的方法定位,我怀疑有哪些样式会影响定位。


您尝试的问题是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团队不想记录的所有东西都存在(或死亡)的地方。