3

我将使用 HSlider 来设置一系列值。我希望左拇指看起来像而右拇指看起来像,所以它们似乎包含范围(范围)而不是|range| . 我只知道如何为 SliderThumb 设置皮肤,这将为两者设置皮肤。有谁知道为每个拇指设置不同皮肤的方法?

谢谢。

更新

我现在有这个代码:

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

    <mx:Style>
    .thumbTickLeft
    {
        disabledSkin: Embed(source="skins.swf", symbol="thumbTickLeft_disabledSkin");
        downSkin: Embed(source="skins.swf", symbol="thumbTickLeft_downSkin");
        overSkin: Embed(source="skins.swf", symbol="thumbTickLeft_overSkin");
        upSkin: Embed(source="skins.swf", symbol="thumbTickLeft_upSkin");
    }
    .thumbTickRight
    {
        disabledSkin: Embed(source="skins.swf", symbol="thumbTickRight_disabledSkin");
        downSkin: Embed(source="skins.swf", symbol="thumbTickRight_downSkin");
        overSkin: Embed(source="skins.swf", symbol="thumbTickRight_overSkin");
        upSkin: Embed(source="skins.swf", symbol="thumbTickRight_upSkin");
    }
    </mx:Style>

    <mx:Script>
        <![CDATA[
            override protected function commitProperties():void
            {
                super.commitProperties();

                updateThumbSkins();   
            }

            private function updateThumbSkins():void
            {
                this.getThumbAt(0).setStyle('styleName','thumbTickLeft');
                this.getThumbAt(1).setStyle('styleName','thumbTickRight');
            }
        ]]>
    </mx:Script>


</mx:HSlider>

拇指滴答声根本不显示?顺便说一句,我确保皮肤正确加载,因为我可以将它们设置为这样的按钮:

<mx:Button styleName="thumbTickRight"/>
4

3 回答 3

2

好吧,我能够让它以这种方式工作..不确定这是否是最好的方式。

<?xml version="1.0" encoding="utf-8"?>
<mx:HSlider 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    sliderThumbClass="RangeSliderThumb" 
    creationComplete="initThumbs()">

    <mx:Script>
        <![CDATA[
            import mx.controls.sliderClasses.SliderThumb;

            [Embed(source="skins.swf", symbol="thumbTickLeft_upSkin")]
            private var leftUp:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_upSkin")]
            private var rightUp:Class;

            [Embed(source="skins.swf", symbol="thumbTickLeft_downSkin")]
            private var leftDown:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_downSkin")]
            private var rightDown:Class;

            [Embed(source="skins.swf", symbol="thumbTickLeft_overSkin")]
            private var leftOver:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_overSkin")]
            private var rightOver:Class;

            [Embed(source="skins.swf", symbol="thumbTickLeft_disabledSkin")]
            private var leftDisabled:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_disabledSkin")]
            private var rightDisabled:Class;

            private function initThumbs():void 
            {
                this.thumbCount = 2;

                var thumb1:SliderThumb = this.getThumbAt(0);
                thumb1.setStyle("thumbUpSkin", leftUp);
                thumb1.setStyle("thumbDownSkin", leftDown);
                thumb1.setStyle("thumbOverSkin", leftOver);
                thumb1.setStyle("thumbDisabledSkin", leftDisabled);

                var thumb2:SliderThumb = this.getThumbAt(1);
                thumb2.setStyle("thumbUpSkin", rightUp);
                thumb2.setStyle("thumbDownSkin", rightDown);
                thumb2.setStyle("thumbOverSkin", rightOver);
                thumb2.setStyle("thumbDisabledSkin", rightDisabled);
            }
        ]]>
    </mx:Script>

</mx:HSlider>
于 2009-07-01T19:41:20.963 回答
1

你可能不会再读这本书了,但是为了其他人的利益,因为我试图操纵多个拇指以使每个拇指都有不同的皮肤,所以我想我会指出你在原始代码中出错的地方。我遵循了您的原始代码示例,也无法渲染拇指,然后我才明白为什么您的最终解决方案有效。

问题是,在原始代码中,您使用的是 upSkin、downSkin 等样式属性,而在有效的代码中,您使用的是 thumbUpSkin、thumbDownSkin 等。细微的变化,但一切都不同!

希望这可以帮助某人挽救他们一天的生命...... ;-)

干杯德鲁

于 2009-12-15T05:00:52.123 回答
0

我认为您可以通过继承 Slider 类(或 HSlider)并添加一个方法来分别将皮肤应用于每个拇指来做到这一点。

在 Slider.as 中有一个方法叫做createThumbs. 如果你查看它,你会看到当一个拇指被创建时,它的皮肤是根据为thumbUpSkin等设置的任何内容分配给它的。

thumb = SliderThumb(new _thumbClass());

thumb.owner = this;
thumb.styleName = new StyleProxy(this, thumbStyleFilters);
thumb.thumbIndex = i;
thumb.visible = true;
thumb.enabled = enabled;

thumb.upSkinName = "thumbUpSkin";
thumb.downSkinName = "thumbDownSkin";
thumb.disabledSkinName = "thumbDisabledSkin";
thumb.overSkinName = "thumbOverSkin";
thumb.skinName = "thumbSkin";

因此,您可以创建一个名为的方法skinThumbs并让它覆盖在createThumbs. 您可以通过调用获得每个拇指getThumbAt(int)。如果您需要覆盖皮肤设置的手,请给我留言。

我会覆盖该commitProperties方法并skinThumbs从那里调用 - 只需确保skinThumbs在调用super.commitProperties. 顺便说一句,该createThumbs方法commitProperties仅从 调用,并且仅从 中的一个位置调用commitProperties,因此您不必担心您的修改会被另一个内部调用替换createThumbs

于 2009-07-01T16:05:38.750 回答