禁用List或DataGrid组件的翻转颜色

时间:2010-02-24 10:03:20

标签: flex itemrenderer rollover

我希望摆脱基于列表的组件中典型的Flex翻转颜色,并显示我自己的翻转渲染风格。

将useRollOver设置为'false'是不是选项,因为禁用它也会使List.isItemHighlighted()函数始终返回false。我的自定义渲染器依赖于该功能。

难道这么难吗?有没有办法将翻转颜色设置为透明?我的渲染器是否还有其他方法可以确定项目是否突出显示?

谢谢!

编辑:当然我可以将rollOver颜色设置为'white'并将alternatingRowColors设置为类似于white的颜色。作弊的种类:)

3 个答案:

答案 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类的副本。

祝我的朋友好运,如果你成功了,请与全世界分享你的新课程,因为我相信其他人可能也想做同样的事情。