ثني:HSlider - هل تريد تعيين أشكال مختلفة لإبهام مختلفة؟

StackOverflow https://stackoverflow.com/questions/1069457

  •  21-08-2019
  •  | 
  •  

سؤال

سأستخدم HSlider لتعيين نطاق من القيم.أود أن يبدو الإبهام الأيسر ( والإبهام الأيمن ليبدو مثل ) لذلك يبدو أنها تشمل النطاق مثل (يتراوح) بدلاً من |النطاق|.أنا أعرف فقط كيفية ضبط الجلد لـ 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"/>
هل كانت مفيدة؟

المحلول

حسنًا، لقد تمكنت من تشغيله بهذه الطريقة..لست متأكدًا مما إذا كانت هذه هي الطريقة الأفضل أم لا.

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

نصائح أخرى

لا يجوز لك قراءة هذا مرة أخرى، ولكن لصالح الآخرين الذين يعانون من قدر كبير من الألم أثناء محاولتي التعامل مع عدة إبهامات بحيث يكون لكل منهم مظهر مختلف، اعتقدت أنني سأشير إلى الخطأ الذي حدث في شفرتك الأصلية.لقد اتبعت مثال الكود الأصلي الخاص بك ولم أتمكن أيضًا من عرض الإبهام، ثم اتضح لي سبب نجاح الحل النهائي.

المشكلة هي أنك في الكود الأصلي تستخدم خصائص النمط upSkin، وdownSkin، وما إلى ذلك، بينما في الكود الذي يعمل تستخدم ThumbUpSkin، وthumbDownSkin، وما إلى ذلك.تغيير طفيف لكنه يحدث كل الفرق!

آمل أن يساعد هذا شخصًا ما في إنقاذ يوم من حياته على المسار الصحيح ...؛-)

هتافات درو

أعتقد أنه يمكنك القيام بذلك عن طريق تصنيف فئة 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top