from http://twaver.servasoft.com/?p=3631 thanks
论坛一直有人问为何设置了twaver.controls.Tree的horizontalScrollPolicy为 ScrollPolicy.AUTO,可是还是没有横向滚动条。这是由于Adobe出于性能的考虑,没有计算maxHorizontalScrollPosition的值。本文贴出了解决方案,效果如下:
从原始Tree继承出新的类AutoSizeTree:
package com.render
{
import flash.events.Event;
import mx.controls.Alert;
import mx.controls.Tree;
import mx.core.ScrollPolicy;
import mx.core.mx_internal;
public class AutoSizeTree extends Tree
{
public function AutoSizeTree()
{
super();
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);
var indentation:Number = getStyle("indentation");
if (diffWidth <= 0)
maxHorizontalScrollPosition = NaN;
else
maxHorizontalScrollPosition = diffWidth + indentation;
super.updateDisplayList(unscaledWidth, unscaledHeight);
}
}
}
如果您数据量少,性能不是大问题,不妨试一试
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:cmp="com.render.*"
height="100%" width="100%" paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0">
<cmp:AutoSizeTree
id="checkTree"
itemRenderer="com.render.CheckTreeRenderer"
change="updataDataGrid()"
labelField="@label"
width="100%" height="100%"
horizontalScrollPolicy="auto" >
</cmp:AutoSizeTree>
</mx:Application>
论坛一直有人问为何设置了twaver.controls.Tree的horizontalScrollPolicy为 ScrollPolicy.AUTO,可是还是没有横向滚动条。这是由于Adobe出于性能的考虑,没有计算maxHorizontalScrollPosition的值。本文贴出了解决方案,效果如下:
从原始Tree继承出新的类AutoSizeTree:
package com.render
{
import flash.events.Event;
import mx.controls.Alert;
import mx.controls.Tree;
import mx.core.ScrollPolicy;
import mx.core.mx_internal;
public class AutoSizeTree extends Tree
{
public function AutoSizeTree()
{
super();
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);
var indentation:Number = getStyle("indentation");
if (diffWidth <= 0)
maxHorizontalScrollPosition = NaN;
else
maxHorizontalScrollPosition = diffWidth + indentation;
super.updateDisplayList(unscaledWidth, unscaledHeight);
}
}
}
如果您数据量少,性能不是大问题,不妨试一试
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:cmp="com.render.*"
height="100%" width="100%" paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0">
<cmp:AutoSizeTree
id="checkTree"
itemRenderer="com.render.CheckTreeRenderer"
change="updataDataGrid()"
labelField="@label"
width="100%" height="100%"
horizontalScrollPolicy="auto" >
</cmp:AutoSizeTree>
</mx:Application>