2010-03-11 92 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(); 

    }