2010-03-11 54 views
0

有没有简单的方法来设置HDividedBox(或VDividedBox的)BoxDivider对象的背景颜色? BoxDivider是具有拖动控制的“分频器”。Flex HDividedBox Divider backgroundColor

默认情况下,BoxDivider透明,其上的小手柄图像是透明的。

有一种dividerSkin样式,默认为mx.skin.BoxDividerSkin,它是对Assets.swf文件中符号的引用。

任何想法?我需要制作替代皮肤吗?这是我唯一的选择吗?谷歌搜索引发了我很多解决方案,这很奇怪,很老套,坦率地说,似乎没有工作。

谢谢。

回答

3

OK,这里是你如何做到这一点:

  1. 创建扩展ProgrammaticSkin
  2. 覆盖的updateDisplayList方法是这样一类:
override protected function updateDisplayList(w:Number, h:Number):void 
{ 
    var divwidth:Number = getStyle("dividerThickness"); 

    if (divwidth == 0) 
    { 
     divwidth = 10; 
    } 

    graphics.clear(); 
    graphics.beginFill(0xFF0000, 1.0); 
    graphics.drawRect(-(parent.height/2), -(divwidth/2), parent.height, divwidth); 
    graphics.endFill(); 

} 

然后加入这您的分区框

<mx:HDividedBox dividerSkin="path.MyDividerSkin"/> 

默认情况下,皮肤被添加到分压器,这样,你需要以抵消X & y的中间...

+0

太棒了!文档使它看起来像一个简单的样式更改,但是当您设置样式不起作用。搞清楚这一点很好。 – invertedSpear 2010-03-11 19:06:10

0

我希望能够为每个分区创建一个简单的编程皮肤。这样我就可以做到这一点:

< MX:HDividedBox类dividerSkin =“path.MyDividerSkin”

,但我有困难,搞清楚MyDividerSkin类应该是什么样子。你认为这很容易。 :)

1

此外,您还可以扩展DividedBox将并覆盖到的updateDisplayList是这样的:

override protected function updateDisplayList(w:Number, h:Number):void 
    { 

     super.updateDisplayList(w,h); 

     graphics.clear(); 
     var n:int = numDividers; 
     graphics.beginFill(0xFF0000, 1.0); 
     for (var i:int = 0; i < n; i++) 
     { 
      var box:BoxDivider = getDividerAt(i); 
      graphics.drawRect(box.x, box.y, box.width, box.height); 
     } 
     graphics.endFill(); 

    }