回到顶部
您的当前位置: 编程语言> FLEX> FLEX基础> 进阶应用
如何让Flex的Tree显示水平滚动条
2014-06-25 18:04:43
标签: 转载 flex tree 水平滚动条
问题描述

2014年6月25日,报表项目增加树形控件,显示列的时候,设置横滚动条为auto的时候不予以显示。

问题原因

这是由于Adobe出于性能的考虑,没有计算maxHorizontalScrollPosition的值。

解决方案

百度找到的解决方案如下,-->原文链接<--

从原始Tree继承出新的类AutoSizeTree,然后在Application直接调用即可,类源码如下:

package {
    import flash.events.Event;
    
    import mx.core.ScrollPolicy;
    import mx.core.mx_internal;
    
    import twaver.DataBox;
    import twaver.controls.Tree;
    
    public class AutoSizeTree extends Tree {
        public function AutoSizeTree(dataBox:DataBox=null) {
            super(dataBox);
            horizontalScrollPolicy = ScrollPolicy.AUTO;
        }
        
        override public function get maxHorizontalScrollPosition():Number {
            if (isNaN(mx_internal::_maxHorizontalScrollPosition))
                return 0;
            
            return mx_internal::_maxHorizontalScrollPosition;
        }
        
        override public function set maxHorizontalScrollPosition(value:Number):void {
            mx_internal::_maxHorizontalScrollPosition = value;
            dispatchEvent(new Event("maxHorizontalScrollPositionChanged"));
            
            scrollAreaChanged = true;
            invalidateDisplayList();
        }
        
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
            var diffWidth:Number = measureWidthOfItems(0,0) - (unscaledWidth - viewMetrics.left - viewMetrics.right);
            
            if (diffWidth <= 0)
                maxHorizontalScrollPosition = NaN;
            else
                maxHorizontalScrollPosition = diffWidth;
            
            super.updateDisplayList(unscaledWidth, unscaledHeight);
        }
    }
}