Прокрутка 2 списков с помощью 1 скроллера Flex 4 - PullRequest
0 голосов
/ 25 сентября 2010

Попытка прокрутки 2 списков с отключением их собственных скроллеров с добавлением 1 скроллера справа от них.

Я попытался установить область просмотра каждого списка в качестве скроллера, и пока он работает, он просто создает экземпляр скроллерав каждом из списков вместо использования 1.

По сути, я пытаюсь сделать так, чтобы они одновременно прокручивались вертикально, перетаскивая только 1 большой палец полосы прокрутки.

1 Ответ

0 голосов
/ 08 октября 2010

Я подумал, что это интересный вопрос, и провел небольшое расследование. Вот что я придумал.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           initialize="application1_initializeHandler(event)"
           creationComplete="application1_creationCompleteHandler(event)">
<fx:Script>
    <![CDATA[
        import flashx.textLayout.container.ScrollPolicy;

        import mx.collections.ArrayCollection;
        import mx.events.FlexEvent;
        [Bindable] private var dp:ArrayCollection = new ArrayCollection();
        protected function application1_initializeHandler(event:FlexEvent):void
        {
            //Add some dummy content
            for (var i:int=0; i<20; i++){
                dp.addItem("Test Item " + i);
            }
            //Turn off vertical scrolling for the two lists
            list1.scroller.setStyle("verticalScrollPolicy", ScrollPolicy.OFF);
            list2.scroller.setStyle("verticalScrollPolicy", ScrollPolicy.OFF);
        }


        protected function vScroll_changeHandler(event:Event):void
        {
            //Set the maximum of the one scroll bar to equal the maximum value of the hidden scroll bar
            vScroll.maximum = list1.scroller.verticalScrollBar.maximum;
            //Set the scroll position of the two hidden scroll bars to the value of the visible bar
            list1.scroller.verticalScrollBar.value = vScroll.value;
            list2.scroller.verticalScrollBar.value = vScroll.value;
        }


        protected function application1_creationCompleteHandler(event:FlexEvent):void
        {
            //Initialize the maximum value to the value of the hidden scroll bar after data has been loaded
            vScroll.maximum = list1.scroller.verticalScrollBar.maximum;
        }

    ]]>
</fx:Script>

<s:HGroup>
    <s:List id="list1" dataProvider="{dp}" height="200"/>

    <s:List id="list2" dataProvider="{dp}" height="200"/>
    <s:VScrollBar id="vScroll" height="200" change="vScroll_changeHandler(event)"/>
</s:HGroup>

</s:Application>
...