2009-10-09 5 views
0

У меня возникают некоторые проблемы при попытке скрыть полосу прокрутки по горизонтали с помощью Degrafa. Полоса прокрутки не отображается вообще. Я проверил, нужно ли показывать полосу прокрутки без скиннинга, и это так. Есть ли какие-либо проблемы с этим? Вот код:Skinning HorizontalList scrollbar с Degrafa

Здесь я определяю HorizontalList, где я хочу скелетный ScrollBar

<mx:HorizontalList horizontalScrollBarStyleName="thumbnailScrollbar"/> 

Вот где я определяю ClassReference для шкур (нуль для стрел, так что они не показывают вверх) ,

.thumbnailScrollbar 
{ 
    up-arrow-skin:  ClassReference(null); 
    down-arrow-skin: ClassReference(null); 
    trackSkin:  ClassReference("ScrollBarTrackSkin"); 
    thumbSkin:  ClassReference("ScrollBarThumbSkin"); 
} 

ScrollBarTrackSkin:

<?xml version="1.0" encoding="utf-8"?> 
<GraphicBorderSkin xmlns:mx="http://www.adobe.com/2006/mxml" 
       xmlns="http://www.degrafa.com/2007"> 
    <fills> 
     <SolidFill id="upFill" color="#FFFFFF" alpha="0.8"/> 
    </fills> 

    <geometry> 
     <RoundedRectangle id="track" x="-8" cornerRadius="16" width="{this.skinWidth}" height="{this.skinHeight}" fill="{upFill}"/> 
    </geometry> 

</GraphicBorderSkin> 

ScrollBarThumbSkin:

<?xml version="1.0" encoding="utf-8"?> 
<GraphicBorderSkin xmlns:mx="http://www.adobe.com/2006/mxml" 
         xmlns="http://www.degrafa.com/2007"> 

    <fills> 
     <SolidFill id="background" color="#333333" alpha=".8"/> 
    </fills> 

    <geometry> 
     <RoundedRectangle id="thumb" cornerRadius="16" width="{this.skinWidth}" height="{this.skinHeight}" fill="{background}"/> 
    </geometry> 
</GraphicBorderSkin> 

Я наполнении HorizontalList с большим количеством предметов, чем можно просматривать, и как я уже сказал, прежде чем полоса прокрутки появляется, когда я удалить шкуры.

ответ

2

Где находится ваш скин и ширина кожи? Как правило, degrafa примеры сделать что-то подобное в коже, чтобы обновить высота/ширина:

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ 
       super.updateDisplayList(unscaledWidth, unscaledHeight); 
       awidth = unscaledWidth; 
       aheight = unscaledHeight; 

      } 

В дополнение к этому, мне нужно сделать это:

override public function get measuredWidth():Number {return 16; } 
override public function get measuredHeight():Number {return 10;} 

в моих ScrollBar шкуры, чтобы получить высоту и ширину, которые я хотел. (то же самое для V & H, поскольку они вращаются внутри). В скинах прокрутки Flex был взломанный код, и мои бары также не отображались.

Но я в настоящее время не использую degrafa для своих скинов, поэтому может возникнуть другая проблема. У меня нет примеров передо мной.

+0

переопределить updateDisplayList больше не требуется. GraphicBorderSkin имеет переменные skinWidth и skinHeight, которые заменяют необходимость переопределенной функции – asawilliams

+0

Ok. Тем не менее, попробуйте установить измеренное значениеHeight/measuredWidth. Или отлаживайте функцию updateDisplayList, чтобы узнать, что такое размеры. – Glenn

+0

Вы были правы, я получал 0 для обоих измерений – asawilliams