<mx:Tree/> 只会自动显示垂直滚动条而不会自动显示水平滚动条,貌似是因为没有对

maxHorizontalScrollPosition属性进行动态的处理,一下重写tree组件,可以自动显示水平滚动条。

  1. package com.common.tree {   
  2. import flash.events.Event;   
  3.  
  4. import mx.controls.Tree;   
  5. import mx.core.ScrollPolicy;   
  6. import mx.core.mx_internal;   
  7.  
  8. /**   
  9. * 自动显示横向滚动条   
  10. * @author chensong   
  11. *   
  12. */   
  13. public class AutoSizeTree extends Tree {   
  14. public function AutoSizeTree() {   
  15. super();   
  16. horizontalScrollPolicy = ScrollPolicy.AUTO;   
  17. }   
  18.  
  19. override public function get maxHorizontalScrollPosition():Number {   
  20. if (isNaN(mx_internal::_maxHorizontalScrollPosition))   
  21. return 0;   
  22. return mx_internal::_maxHorizontalScrollPosition;   
  23. }   
  24.  
  25. override public function set maxHorizontalScrollPosition(value:Number):void {   
  26. mx_internal::_maxHorizontalScrollPosition = value;   
  27. dispatchEvent(new Event("maxHorizontalScrollPositionChanged"));   
  28. scrollAreaChanged = true;   
  29. invalidateDisplayList();   
  30. }   
  31.  
  32. override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {  
  33.  var diffWidth:Number = measureWidthOfItems(0, 0) - (unscaledWidth - viewMetrics.left - viewMetrics.right);  
  34.    
  35. var indentation:Number = getStyle("indentation");   
  36.  
  37. if (diffWidth <= 0)   
  38. maxHorizontalScrollPosition = NaN;   
  39. else   
  40. maxHorizontalScrollPosition = diffWidth + indentation;   
  41. super.updateDisplayList(unscaledWidth, unscaledHeight);   
  42. }   
  43. }   
  44. }