【问题标题】:How to add a click event to Axis labels in Flex如何在 Flex 中向轴标签添加点击事件
【发布时间】:2012-04-10 20:07:18
【问题描述】:

我有这样一个垂直轴的条形图

<mx:verticalAxis >
    <mx:CategoryAxis id="catAxis" title="Employee"  categoryField="id"/>
</mx:verticalAxis>

我希望垂直轴上的标签可以点击。因此,当用户单击标签时,会触发单击事件,我可以对其进行处理。我对点击栏本身不感兴趣(我知道如何实现)

我尝试向 Mouse.Click 类型的 CategoryAxis 添加一个事件侦听器,但没有触发任何事件。

感谢任何帮助。

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

    好的,我让它工作了。我将发布答案,以便其他有类似要求的人受益。所以,Timofei Davydik 帮助我找到了正确的方向。我创建了一个名为 MyLabelRenderer 的 ActionScript 类,它扩展了 ChartLabel。在它的构造函数中,我添加了所有的事件监听器,比如我需要的鼠标点击事件。

    这是棘手的部分。感谢 KB(朋友)提供正确的实例化。在我的图表所在的主应用程序中,我必须以这种方式实例化我的新类 MyLabelRenderer 的一个实例:

    private var myLabelRenderer:ClassFactory = new ClassFactory(MyLabelRenderer);
    

    然后你可以通过这种方式将它分配给 AxisRenderer 对象:

    <mx:verticalAxisRenderers>
        <mx:AxisRenderer axis="{catAxis}" labelRenderer="{myLabelRenderer}"/>
    </mx:verticalAxisRenderers>
    

    祝你好运……

    【讨论】:

    • 注意:您也应该能够在不创建变量和使用花括号绑定表达式的情况下执行此操作,方法是使用作为您的完全限定包名称的字符串指定 labelRenderer班级。我通常使用Lists 来执行此操作,它是itemRenderer 属性,它也需要ClassFactory。我想知道为什么会这样……ClassFactory 的文档解释如下:“MXML 允许您使用以下语法:&lt;mx:List id="myList" itemRenderer="ProductRenderer"&gt; MXML 编译器会自动为您创建 ClassFactory 实例。”多么整洁!
    【解决方案2】:

    我建议如下:

    1. 创建您的自定义轴渲染器(扩展 AxisRenderer)并将其分配给您正在使用的 AxisverticalAxisRenderer 样式属性。
    2. 创建自定义标签渲染器并将其分配给轴渲染器的labelRenderer 属性。您可以在其中添加点击侦听器。 注意:标签渲染器必须实现 IDataRenderer 和 IFlexDisplayObject 接口。

    【讨论】:

    • @Timofie 谢谢你的建议,但我不太确定我理解你的方法。能否提供更多细节?
    猜你喜欢
    • 1970-01-01
    • 2011-11-17
    • 2018-06-29
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2020-01-21
    相关资源
    最近更新 更多