0

Degrafa を使用して horizo​​ntalList のスクロールバーをスキニングしようとすると、いくつかの問題が発生します。スクロールバーがまったく表示されません。スキニングなしでスクロールバーが表示されるかどうかを確認しましたが、表示されます。これを行う際に落とし穴はありますか?ここにいくつかのコードがあります:

これは、スキン付きスクロールバーが必要な Horizo​​ntalList を定義する場所です

<mx:HorizontalList horizontalScrollBarStyleName="thumbnailScrollbar"/>

ここで、スキンの ClassReference を定義します (矢印が null であるため、表示されません)。

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

表示可能な項目よりも多くの項目を Horizo​​ntalList に入力しています。前に述べたように、スキニングを削除するとスクロールバーが表示されます。

4

1 に答える 1

2

skinHeight と skinWidth はどこに設定されていますか? 通常、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;}

スクロールバーのスキンで、必要な高さと幅を取得しました。(内部で回転するため、V と H の両方で同じです)。Flex スクロールバー スキンにハッキーなコードがあり、バーも表示されませんでした。

しかし、現在スキンに degrafa を使用していないため、別の問題がある可能性があります。私の前に例はありません。

于 2009-10-13T02:56:24.783 に答える