Компонент 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