2009-03-05 8 views
3

기본적으로 HorizontalList 구성 요소의 Horizontal ScrollBar는 맨 아래에 있습니다. 위치를 바꿀 수있는 방법이 있나요?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); 
     } 

    } 
} 
관련 문제