flex tree自动显示横向滚动条实现代码

随心笔谈2年前发布 admin
180 0 0

文章摘要

这篇文章描述了一个名为`AutoSizeTree`的类,它继承自`Tree`组件,并实现了自适应滚动条的功能。该类通过继承`Tree`组件,自定义滚动条的宽度和滚动策略。核心方法包括: 1. `get maxHorizontalScrollPosition()`:获取当前滚动条的宽度,若测量值小于0则返回NaN。 2. `set maxHorizontalScrollPosition(value:Number):void`:设置滚动条的宽度,并触发滚动变化事件。 3. `updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void`:根据组件宽度和滚动条的测量值计算滚动条的宽度。 该类通过动态调整滚动条的宽度,以适应不同宽度的显示区域,实现了自适应滚动功能。

package com.anydata.consumer.components

{

import flash.events.Event;

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

}

}

}

© 版权声明

相关文章