Как я могу использовать vslider в качестве полосы прокрутки для списка? - PullRequest
3 голосов
/ 23 июля 2011

как мне использовать vslider в качестве полосы прокрутки для списка? Я получил это, но не могу понять это отсюда:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    
           xmlns:mx="library://ns.adobe.com/flex/mx"     
           xmlns:s="library://ns.adobe.com/flex/spark"  height="100%" width="100%">

<s:VSlider id="slider" minimum="0" maximum="{listy.height}" liveDragging="true"/>

<s:List id="listy" width="50%" height="100">
    <s:layout>
        <s:VerticalLayout id="vLayout" verticalScrollPosition="{slider.value}" />
    </s:layout>

    <mx:ArrayCollection>
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
    </mx:ArrayCollection>
</s:List>
</s:Application>

РЕДАКТИРОВАТЬ: Используя приведенное ниже предложение Нейта, я получил его, но он показывает как vslider, так и полосу прокрутки по умолчанию. Как скрыть полосу прокрутки по умолчанию? Я попытался установить verticalScrollPolicy = "off", но это не сработало. ТНХ

Ответы [ 3 ]

2 голосов
/ 24 июля 2011

Это вполне возможно, и я хочу доказать это! Все шутки в сторону, здесь это работает с простой привязкой, вы были очень близки!

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    
               xmlns:mx="library://ns.adobe.com/flex/mx"     
               xmlns:s="library://ns.adobe.com/flex/spark"  height="100%" width="100%">

    <s:Group>
        <s:layout>
            <s:HorizontalLayout/>
        </s:layout>

        <s:List id="listy" width="50%" height="100" 
                change="slider.value=listy.layout.verticalScrollPosition" creationComplete="
                listy.dataGroup.addEventListener(MouseEvent.MOUSE_WHEEL, function():void{
                    slider.value=listy.layout.verticalScrollPosition}
                );">
            <s:layout>
                <s:VerticalLayout id="vLayout" verticalScrollPosition="{slider.value}" />
            </s:layout>

            <mx:ArrayCollection>
                <fx:String>Flash</fx:String> 
                <fx:String>Director</fx:String> 
                <fx:String>Dreamweaver</fx:String> 
                <fx:String>ColdFusion</fx:String> 
                <fx:String>Flash</fx:String> 
                <fx:String>Director</fx:String> 
                <fx:String>Dreamweaver</fx:String> 
                <fx:String>ColdFusion</fx:String> 
                <fx:String>Flash</fx:String> 
                <fx:String>Director</fx:String> 
                <fx:String>Dreamweaver</fx:String> 
                <fx:String>ColdFusion</fx:String> 
            </mx:ArrayCollection>
        </s:List>

        <s:VSlider id="slider" height="{listy.height}" 
                   minimum="0" maximum="{listy.dataGroup.contentHeight - listy.height}" 
                   showDataTip="false" scaleY="-1" liveDragging="true"/> 

    </s:Group>
</s:Application>

Пин мне, если ты не понимаешь, как и почему:)

0 голосов
/ 24 июля 2011

как использовать vslider в качестве полосы прокрутки для списка? Я получил это, но не могу понять это отсюда:

К сожалению, я не верю, что это возможно без значительных переделок.

Список реализован внутри ListSkin как Scroller и DataGroup.
Скроллер состоит из двух частей обложки: вертикальная прокрутка и горизонтальная прокрутка. Вы хотите заменить veritcalScrollBar на VSlider.

К сожалению, для скина требуется экземпляр VScrollBar, и нет класса интерфейса, который можно использовать для замены одного на другой. (Реализация Scroller была реализована с использованием подхода Flex 2/3, чтобы сделать его невозможным для расширения)

Вы застряли, используя черную магию, чтобы заставить это работать.

Тем не менее, попытка сделать VSCrollBar похожим на VSlider, похоже, является лучшим выбором.

0 голосов
/ 24 июля 2011

Лучший способ, с помощью которого я могу предложить вам достичь своей цели, это снять шкуру.Создайте скин для VScrollBar, который будет выглядеть так же, как VSlider.Затем создайте пользовательский скин Scroller (возьмите spark.skins.spark.ScrollerSkin в качестве шаблона) и назначьте там эти скины скроллера.Затем создайте свой собственный скин List (на основе spark.skins.spark.ListSkin) и назначьте скин Scroller для Scroller там.

В случае, если вам (по какой-либо причине) придется использовать оригинальный VSlider вам нужно написать свой собственный Scroller с помощью ползунков и использовать его в своем List скине.

Я предлагаю вам первый способ.

...