Автоматическое скрытие пользовательской полосы прокрутки Flex 4 - PullRequest
1 голос
/ 11 января 2010

У меня есть пользовательская полоса прокрутки, которая управляет группой как ее окном просмотра.

<s:HGroup>
        <s:Group width="520" height="380" clipAndEnableScrolling="true" id="descriptionBox" >
            <s:RichText  text="Test Test Test Test Test Test Test "
                        width="490" textAlign="justify" fontFamily="Arial" fontSize="12" color="#999999" />
        </s:Group>
        <s:VScrollBar viewport="{descriptionBox}" 
                left="{descriptionBox.x + descriptionBox.width + 10}" 
                top="10" 
                height="{descriptionBox.height}"
                fixedThumbSize="true"
                skinClass="VScrollBarSkin"/>
    </s:HGroup> 

Я хочу сделать эту полосу прокрутки автоматически скрытой, когда содержимое этой группы не больше, чем представление, любая идея, как это сделатьэто вообще (имеется в виду, что я не хочу зависеть от компонента внутри группы области просмотра)?

Спасибо.

1 Ответ

1 голос
/ 12 января 2010

Компонент Scroller в Flex 4 делает именно это:

  • Автоматически скрывает / показывает горизонтальные и вертикальные полосы прокрутки в GroupBase (Group или DataGroup, которые являются IViewports)
  • Позволяет настроить полосы прокрутки в скинах

Вот код, который будет делать то, что вы описываете:

<s:Application
    xmlns="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx">

    <Script>
        <![CDATA[

            private var times:int = 400;

            private function updateText(type:String):void
            {
                var newText:String = "";
                var i:int = 0;
                var n:int = times;
                for (i; i < n; i++)
                {
                    newText += "Test ";
                }
                var text:String = richText.text;
                if (type == "add")
                    text += newText;
                else
                    text = newText.replace(text) + '';
                richText.text = text;
            }

        ]]>
    </Script>
    <s:HGroup>
        <s:Button label="+" click="updateText('add')"/>
        <s:Button label="-" click="updateText('remove')"/>
    </s:HGroup>
    <s:Scroller width="520" height="380" id="scroller" minViewportInset="1" focusEnabled="false">
        <s:Group clipAndEnableScrolling="true" id="descriptionBox">
            <s:RichText id="richText" creationComplete="updateText('add')"
                width="490" textAlign="justify" fontFamily="Arial" fontSize="12" color="#999999" />
        </s:Group>
    </s:Scroller>
</s:Application>

Вы не хотели бы добавлять явную ширину / высоту для вашей группы, поскольку она зависит от размеров ее дочерних элементов. Если вы заверните его в Scroller, он обработает все детали для вас.

Вы можете проверить VScrollBarSkin, VScrollBarThumb, VScrollBarTrack и т. Д., Если вы хотите настроить графику для этих элементов. А если вам не нужна горизонтальная полоса прокрутки, вы можете просто не включать ее в свой класс MyScrollerSkin.

Надеюсь, это поможет, Lance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...