2009-10-09 14 views
0

Je rencontre des problèmes lorsque je tente d'habiller la barre de défilement sur une liste horizontale avec Degrafa. La barre de défilement n'apparaît pas du tout. J'ai vérifié pour voir si la barre de défilement est censée apparaître sans le skinning, et c'est le cas. Y a-t-il des pièges à faire avec ça? Voici un code:Barre de défilement HorizontalList avec Degrafa

C'est là que je définis le HorizontalList où je veux une barre de défilement à la peau

<mx:HorizontalList horizontalScrollBarStyleName="thumbnailScrollbar"/> 

Voici où je définis la ClassReference pour les peaux (null pour les flèches afin qu'ils n'apparaissent) .

.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> 

Je suis peuplant le HorizontalList avec plus d'éléments que sont visibles, et comme je l'ai dit avant que la barre de défilement apparaît lorsque je retire le dépeçage.

Répondre

2

Où est votre peauHauteur et peauConfiguration? En règle générale, degrafa exemples font quelque chose comme ça dans la peau de mettre à jour le rapport hauteur/largeur:

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

      } 

En plus de cela, je devais faire ceci:

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

dans mes peaux scrollbar pour obtenir le la hauteur et la largeur que je voulais. (même chose pour les deux V & H car ils effectuent une rotation interne). Il y avait du code hacky dans les skins de la barre de défilement Flex et mes barres ne s'affichaient pas non plus.

Mais je n'utilise pas actuellement degrafa pour mes skins, il y a peut-être un autre problème. Je n'ai pas d'exemples devant moi.

+0

dérogation updateDisplayList n'est plus nécessaire. GraphicBorderSkin a des variables skinWidth et skinHeight qui remplacent la nécessité de la fonction surchargée – asawilliams

+0

Ok. Toujours, essayez de définir le measuredHeight/measuredWidth. Ou déboguer dans la fonction updateDisplayList pour voir quelles sont les dimensions. – Glenn

+0

vous aviez raison, je recevais 0 pour les deux mesures – asawilliams