Apache flex 如何动态更改mx:PieSeriesItem切片的颜色

Apache flex 如何动态更改mx:PieSeriesItem切片的颜色,apache-flex,actionscript,adobe,charts,mxml,Apache Flex,Actionscript,Adobe,Charts,Mxml,我正在创建一个程序,其中值的更改会导致mx:PieChart中饼图切片的颜色动态更改 应该更改颜色的代码与此类似: (pieChart.pieChartSeries.items[i] as PieSeriesItem).fill = new mx.graphics.SolidColor(0,0.2); // black, almost opaque 追踪结果似乎可以将颜色应用于特定的PieSeriesItem,但颜色在视觉上不会改变。我选中了AS引用,fill属性的类型为iFill,应该接受

我正在创建一个程序,其中值的更改会导致mx:PieChart中饼图切片的颜色动态更改

应该更改颜色的代码与此类似:

(pieChart.pieChartSeries.items[i] as PieSeriesItem).fill  = new mx.graphics.SolidColor(0,0.2); // black, almost opaque
追踪结果似乎可以将颜色应用于特定的PieSeriesItem,但颜色在视觉上不会改变。我选中了AS引用,fill属性的类型为iFill,应该接受solidColor实例。(注意:我也尝试将0x000000作为有效颜色,SolidColor的第一个参数采用uint)

你有没有想过为什么不使用这种颜色?欢迎评论

[编辑]因为我最初发布了这个问题,所以我添加了一些更改来帮助澄清这个问题

  • 我实际上使用的是一个扩展了的MXML组件。最初,我试图在主应用程序的事件处理程序中设置上面列出的颜色。从那时起,我所做的就是在扩展的PieChart组件中调用一个方法,如下所示:
  • (主要应用)

  • 在自定义饼图组件中,我定义了以下方法:

    公共设置PieSiesColor(项目:PieSiesItem):无效{ item.fill=新的mx.graphics.SolidColor(0x0000ff,1); 这个.invalidatesriesstyles()

    }

  • 现在,颜色的变化实际上发生了,但直到用户将鼠标移动到相应的饼图切片上时才看到!真奇怪

    如有任何其他意见,我们将不胜感激

    再次感谢


    Edward

    这似乎是正确的,但我想您需要在设置此属性后重新绘制控件。您是否尝试调用图表上的invalidateDisplayList和/或invalidateProperties方法

    您也可以在该系列中使用填充函数来完成此操作。

    我知道了

    像这样的东西会有用的

            public function setPieSliceColor(item:PieSeriesItem):void{
                item.fill = new mx.graphics.SolidColor(0x0000ff,1);
                this.setFocus();
                this.invalidateSeriesStyles();
                                 // note this line
                item.currentState = "rollOver";
            }   
    

    虽然我正在更改颜色,但在我将鼠标移到切片上之前,颜色不会生效…因此设置切片(或项目)的当前状态似乎可以实现此目的。

    嗨,Christophe-我实际上添加了pieChart.invalidateDisplayList()。奇怪的是,只有当我将鼠标移到实际的馅饼片上时,颜色才会发生变化!我需要它立即显示出来。我想到了一个fill函数,但是我怎样才能再次调用该函数呢?我以为它只在派第一次呈现时才被使用。我将对问题进行一些编辑以添加这些详细信息。如果要扩展控件,则可能需要在更改填充时调用受保护的“invalidateData()”方法。关于fill函数:这个函数在“updateDisplayList()”中被再次调用,因此您应该能够通过调用“invalidateDisplayList()”来调用它。感谢Christophe提供的反馈。我注意到,如果调用invalidateData(),pieChart的颜色会重置,这不是我真正想要的。我将尝试filterfunction,但是a)这不是贯穿所有的饼片吗?我只想更新特定的切片,b)此时我没有定义填充数组,我假设我必须为pieChart创建一个填充数组,以便它知道要更改其填充数组中的哪个“填充”?
            public function setPieSliceColor(item:PieSeriesItem):void{
                item.fill = new mx.graphics.SolidColor(0x0000ff,1);
                this.setFocus();
                this.invalidateSeriesStyles();
                                 // note this line
                item.currentState = "rollOver";
            }