如何让Flex的Tree显示水平滚动条

论坛一直有人问为何设置了twaver.controls.Tree的horizontalScrollPolicy为 ScrollPolicy.AUTO,可是还是没有横向滚动条。这是由于Adobe出于性能的考虑,没有计算maxHorizontalScrollPosition的值。本文贴出了解决方案,效果如下:

从原始Tree继承出新的类AutoSizeTree:

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

测试代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				xmlns:tw="http://www.servasoftware.com/2009/twaver/flex"
				applicationComplete="init()" xmlns:local="*">
	<mx:Script>
		<![CDATA[
			import twaver.*;

			private function init():void {
				var box:ElementBox = new ElementBox();

				var group:Group = new Group();
				group.name = "Group";
				box.add(group);

				for(var i:int=0; i<20; i++){
					var node:Node = new Node();
					node.name = "Node with long long long long long long name " + Utils.randomInt(10000000);
					group.addChild(node);
					box.add(node);
				}

				tree.dataBox = box;
				tree.callLater2(function():void {
					tree.expandAll();
				});
			}
		]]>
	</mx:Script>
	<local:AutoSizeTree id="tree" width="300" height="100%"/>
</mx:Application>

如果您数据量少,性能不是大问题,不妨试一试,完整工程代码见附件:TestAutoSizeTree




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值