2009-03-05 3 views
3

По умолчанию горизонтальная полоса прокрутки компонента HorizontalList будет внизу. Есть ли способ переместить его так, чтобы он был наверху?Flex - изменение положения полосы прокрутки в верхней части компонента HorizontalList

Для ясности я не имею в виду перемещение положения прокрутки с помощью scrollToIndex или horizontalScrollPosition или аналогичного, но фактическое физическое положение компонента полосы прокрутки.

Любые предложения были бы очень признательны!

ответ

3

Я искал что-то подобное себе некоторое время назад и нашел this post. В конечном итоге я решил решить свою проблему по-другому, поэтому не использовал это решение, однако оно могло бы работать именно так, как вы хотите.

1

Я должен был сделать то же самое раньше. Мне пришлось копаться в базовых классах (чтобы справиться с некоторыми проблемами маскировки/позиционирования), и это то, что я придумал:

package 
{ 
    import flash.display.DisplayObject; 

    import mx.controls.HorizontalList; 
    import mx.core.EdgeMetrics; 

    public class ReverseHList extends HorizontalList 
    { 
     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
     { 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 

      var w:Number = unscaledWidth; 
      var h:Number = unscaledHeight; 
      var vm:EdgeMetrics = viewMetrics; 
      if (horizontalScrollBar && horizontalScrollBar.visible) 
      { 
       horizontalScrollBar.setActualSize(w - vm.left - vm.right, 
                horizontalScrollBar.minHeight); 
       horizontalScrollBar.move(vm.left, vm.top); 

       horizontalScrollBar.enabled = enabled; 
      } 

      var mask:DisplayObject = maskShape; 

      var wd:Number = w - vm.left - vm.right; 
      var ht:Number = h - vm.top - vm.bottom; 

      mask.width = wd < 0 ? 0 : wd; 
      mask.height = ht < 0 ? 0 : ht; 

      mask.x = vm.left; 
      mask.y = vm.top + vm.bottom; 
     } 

     override protected function adjustListContent(unscaledWidth:Number = -1, 
             unscaledHeight:Number = -1):void 
     { 
      super.adjustListContent(unscaledWidth, unscaledHeight); 

      var lcx:Number = viewMetrics.left + listContent.leftOffset; 
      var lcy:Number = (viewMetrics.top + listContent.topOffset) + viewMetrics.bottom; 
      listContent.move(lcx, lcy); 
     } 

    } 
}