2009-03-05 8 views
3

Standardmäßig befindet sich die horizontale Bildlaufleiste einer HorizontalList-Komponente unten. Gibt es eine Möglichkeit, es neu zu positionieren, so dass es an der Spitze ist?Flex - Position der Bildlaufleiste an den Anfang einer HorizontalList-Komponente ändern

Nur aus Gründen der Übersichtlichkeit meine ich nicht das Verschieben der Bildlaufposition mit Hilfe von scrollToIndex oder horizontalScrollPosition oder ähnlichem, sondern die tatsächliche physische Position der Bildlaufleistenkomponente.

Alle Vorschläge würden sehr geschätzt werden!

Antwort

3

Ich suchte mich vor einiger Zeit nach etwas ähnlichem und fand this post. Letztendlich habe ich mein Problem auf eine andere Art und Weise gelöst, also habe ich diese Lösung nicht benutzt, aber es könnte für das funktionieren, was Sie wollen.

1

Ich musste das gleiche schon einmal machen. Ich musste in den Basisklassen herumkramen (um einige Probleme mit der Maskierung/Positionierung zu behandeln) und das ist, was ich herausgefunden habe:

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); 
     } 

    } 
}