【问题标题】:in Flex/AS3 how can I highlight a datagrid row?在 Flex/AS3 中如何突出显示数据网格行?
【发布时间】:2017-01-08 09:57:06
【问题描述】:

我正在编写一个应用程序,使用数据网格。根据数据,不同的行是不同的颜色。当用户选择一行时,颜色会变浅一些。

不幸的是,其中一位用户认为对比度不够,想要一个更明显的视觉指示器。我的两个想法是:

A) 围绕选定的整行绘制一个矩形。 B) 添加一列,其中包含我根据是否选择行隐藏或显示的图像。

我沿着路径 A. 走了一会儿,到达了函数中的位置;

覆盖受保护的函数drawHighlightIndicator

当我查看特定行时,我能够识别,但我无法确定如何绘制矩形。

所以我回溯并查看了 B。我能够创建一个带有箭头的项目渲染器,但我不知道如何在选择时打开和关闭它。我在主模块中有一个单击事件,但无法引用回 Item 渲染器组件。

我可以在数组集合中设置一个值,然后进行刷新,这可能会起作用,但这往往会将选定的行移动到数据网格显示区域的顶部。

因此,如果有人可以在 A 或 B 上帮助我,将不胜感激。这是一个 DataGrid,而不是 AdvancedDataGrid。

【问题讨论】:

    标签: actionscript-3 apache-flex datagrid


    【解决方案1】:

    由于您使用的是mx.controls.DataGrid,覆盖drawHighlightIndicator 可能类似于以下示例,它在选择标记周围绘制1px 红色边框:

    protected function drawHighlightIndicator(
        indicator:Sprite, x:Number, y:Number,
        width:Number, height:Number, color:uint,
        itemRenderer:IListItemRenderer):void
    {
        var width:int = unscaledWidth - viewMetrics.left - viewMetrics.right;
        var borderColor:uint = 0xff0000;
        var g:Graphics = Sprite(indicator).graphics;
        g.clear();
        g.beginFill(borderColor);
        g.drawRect(0, 0, width, height);
        g.beginFill(color);
        g.drawRect(1, 1, width - 2, height - 2);
        g.endFill();
        indicator.x = x;
        indicator.y = y;
    }
    

    【讨论】:

    • Petr,我尝试了您的代码,但将它放在 drawSelectionIndicator 中,因为 drawHighlightIndicator 在鼠标悬停时运行。它可以工作,只是它只勾勒出一行中的第一个单元格,而不是整行。
    • @PaulStearns Paul,我已经更新了代码。它现在应该标记整行。
    • Petr,在评论后我已经通过使用“this.width - 2”解决了这个问题,但你的解决方案似乎更优雅。
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2014-10-15
    • 2021-12-28
    相关资源
    最近更新 更多