我希望摆脱基于列表的组件中典型的Flex翻转颜色,并显示我自己的翻转渲染风格。
将useRollOver设置为'false'是不是选项,因为禁用它也会使List.isItemHighlighted()函数始终返回false。我的自定义渲染器依赖于该功能。
难道这么难吗?有没有办法将翻转颜色设置为透明?我的渲染器是否还有其他方法可以确定项目是否突出显示?
谢谢!
编辑:当然我可以将rollOver颜色设置为'white'并将alternatingRowColors设置为类似于white的颜色。作弊的种类:)
答案 0 :(得分:3)
通过在自定义ItemRenderer中将“autoDrawBackground”属性设置为“false”,您可以禁用默认的悬停和所选背景颜色,然后根据需要在渲染器中设置它们。
这只是spark List选项。 MX控件没有它。
答案 1 :(得分:2)
@invertedSpear,谢谢你的暗示。
它确实有效!我的意思是,子类化,而不是编辑SDK,没有尝试过。但是你可以做的是为List,DataGrid等(甚至是AdvancedDataGrid)创建一个子类并添加以下函数:
override protected function drawHighlightIndicator(indicator:Sprite, x:Number, y:Number, width:Number,
height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
// get style -- is this the right place?
var alpha:Number = this.getStyle("rollOverAlpha");
if (isNaN(alpha))
alpha = 1.0;
// no need to draw if alpha 0
if (alpha <= 0)
return;
// draw -- this has been copied from superclass, and the alpha parameter added to beginFill()
var g:Graphics = Sprite(indicator).graphics;
g.clear();
g.beginFill(color, alpha);
g.drawRect(0, 0, width, height);
g.endFill();
indicator.x = x;
indicator.y = y;
}
现在,如果您向该类添加样式声明,则可以滚动:
[Style(name="rollOverAlpha", type="Number", inherit="no")]
public class DataGridExt extends DataGrid
{
...
}
在SDK中更改此选项当然是一个更好的选择,因为您只需触摸两个类:ListBase和AdvancedListBase。我会检查一下Adobe Jira问题..
答案 2 :(得分:0)
有一种方法可以做到这一点,但这并不好玩。您可以编辑SDK本身(Yay for open source)。您可以进入,找到设置突出显示颜色的位置,然后开始添加代码以生成突出显示的alpha的公共属性。我会先备份你的SDK,因为有可能完全搞砸了。
看起来rollOver代码在ListBase类中,所以我会创建该类的副本或扩展,并将roll over alpha的代码添加到该类。然后我会创建一个继承自这个新ListBase的List类的副本。
祝我的朋友好运,如果你成功了,请与全世界分享你的新课程,因为我相信其他人可能也想做同样的事情。