在flex中显示列表项工具提示

时间:2010-10-11 07:55:36

标签: flex list tooltip

我有一个包含图标,标签和工具提示的对象列表。我只想显示图标和标签。工具提示应该在项目上的鼠标上可见。

有没有办法在不编写自己的鼠标悬停功能的情况下实现这一目标?

(请注意,dataTips是另一回事,因为它们仅在切割标签时显示)

2 个答案:

答案 0 :(得分:1)

List项目上显示工具提示的最简单方法是提供dataTipFielddataTipFunction属性,但由于您似乎希望保留默认的“剪切标签”行为,不要逃避编写自己的解决方案。

更新:确定。在使用代码一段时间后,我必须承认,获取这些提示可能有点棘手,但一旦你知道该怎么做它实际上是微不足道的。您需要做的是将showDataTips属性设置为true,将dataTipFunction设置为生成提示的某个函数。

function(item:Object):String{
    return item.tipField;
}

这里奇怪的是,将dataTipField属性设置为'tipField'将不会像上面的函数一样工作,并且我想知道为什么,它对我来说仍然是秘密。

更新2:实际上这种行为并不奇怪,因为它在showDataTips文档中有明确提及,但随着我变老,看不到我用过的那么好你必须原谅我以前的陈述:)

答案 1 :(得分:0)

我遇到了基本相同的场景......好吧有一些细微的差别,我正在使用Flex mx.controls.List并且有一个渲染器设置,渲染器是复选框的扩展,我想要更严格地控​​制工具提示,以便我可以选择显示辅助信息而不是全文(并且仅在截断时)。我尝试了一些基于查看ToolTipManager源的东西但是使用内部寄存器方法没有用完,最终我基本上做了你所说的并且似乎没有问题。因此,想知道使用自己的事件处理程序的问题,您仍然可以使用内置的ToolTipManager方法来显示/隐藏,因此它看起来相对干净。下面的代码来自渲染器本身:

private var myToolTip:IToolTip;

public function FilterItemRenderer() {
    addEventListener(MouseEvent.MOUSE_OVER, mouseOver_handler);
    addEventListener(MouseEvent.MOUSE_OUT, mouseOut_handler);
}
private function mouseOver_handler(event:MouseEvent):void
{
    //In my case using the data elements of the DP to carry the info for tooltips
    if(data.hasOwnProperty("toolTip") && data.toolTip)
        myToolTip = ToolTipManager.createToolTip(data.toolTip, event.stageX+5, event.stageY-5)
}
private function mouseOut_handler(event:MouseEvent):void
{
    if(myToolTip)
        ToolTipManager.destroyToolTip(myToolTip);
    myToolTip=null;
}
override public function get toolTip():String
{
    return null;
}

所以我想我的答案是否定的,除了你的建议之外,我没有看到任何方法做到这一点,但你能再一次澄清这个问题是什么吗?

谢谢,祝你好运, 肖恩