我有一个datagrid,里面有一个datagridcolumn。如果没有自定义itemrenderer,我可以使用datatipfunction来显示自定义数据提示,但现在我想要一个自定义项目渲染,以不同方式着色行。因此,我扩展了标签并更改了数据方法,但现在我的datatip功能不再起作用了。
有什么想法吗?
提前致谢
塞巴斯蒂安
答案 0 :(得分:1)
我知道这个问题有点旧,但是我遇到了同样的问题并通过查看标准DataGridItemRenderer类如何解决它来解决它。
所以基本上我最终将toolTipShowHandler()函数复制到我的类中(没有任何修改),实现了IDropInListItemRenderer接口并在我的渲染器的commitProperties()函数中添加了几行,这些函数也受到了DataGridItemRenderer的启发。 / p>
希望这有帮助。
答案 1 :(得分:1)
我参加派对的时间有点晚了,但是我遇到了一个针对图片的自定义DataGridItemRenderer的问题。以下链接中描述的解决方案很适合我:
http://www.kalengibbons.com/blog/index.php/2008/12/displaying-datatips-when-using-an-itemrenderer/
要点是你覆盖项目渲染的updateDisplayList(),并通过调用dataTipFunction和/或使用dataTipField设置工具提示,就像内置的项目渲染器一样。
答案 2 :(得分:1)
复制cbranch给出的链接内容。 stackoverflow更可靠地保存代码片段
使用itemRenderer时显示DataTips
在DataGridColumn中使用itemRenderers的一个坏处是你丢失了它通常提供的dataTip功能。好吧,这是伪造该功能的一种方法。
首先,像往常一样将dataTipField或dataTipFunction添加到DataGridColumn。
<mx:DataGridColumn headerText="DataTip"
dataField="name1"
showDataTips="true"
dataTipField="description1" />
然后,在itemRenderer中添加以下代码,以便能够使用该信息并显示工具提示。
private function getToolTip():String{
var dg:DataGrid = listData.owner as DataGrid;
var func:Function = dg.columns[listData.columnIndex].dataTipFunction;
if(func != null){
return func.call(this, this.data);
}else if(dg.columns[listData.columnIndex].dataTipField.length){
return data[dg.columns[listData.columnIndex].dataTipField];
}else{
return "";
}
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
this.toolTip = getToolTip();
}
这适用于dataTipFields和dataTipFunctions,并允许您以相同的方式处理列中的dataTips,无论您是否使用itemRenderer。唯一的细微差别是标签的定位,但可以使用样式轻松修改。您可以在此处下载完整的源代码,以获取其工作原理的功能示例。
答案 3 :(得分:-2)
就在我的脑海中,也许让您的自定义项目渲染器扩展DataGridColumn。这将为您的项呈示器提供常规列的所有功能。