Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 当行在DataGrid中可见时,自动在ItemRenderer中显示工具提示_Apache Flex_Actionscript 3_Flex4_Tooltip_Advanceddatagrid - Fatal编程技术网

Apache flex 当行在DataGrid中可见时,自动在ItemRenderer中显示工具提示

Apache flex 当行在DataGrid中可见时,自动在ItemRenderer中显示工具提示,apache-flex,actionscript-3,flex4,tooltip,advanceddatagrid,Apache Flex,Actionscript 3,Flex4,Tooltip,Advanceddatagrid,我有一个AdvancedDataGrid,它使用HierarchycalData以树格式显示数据。对于其中一列,我使用一个AdvancedDataGridRenderProvider在满足某些条件时有条件地显示图像。我目前正在使用ToolTipManager在用户将鼠标移到图像上时显示其他信息 以下是我想做的: 当用户将鼠标放在图像上时,我不想显示工具提示,而是希望每当图像在AdvancedDataGrid中可见时,自动显示工具提示。如果用户在AdvancedDataGrid中滚动,则工具提示应

我有一个
AdvancedDataGrid
,它使用
HierarchycalData
以树格式显示数据。对于其中一列,我使用一个
AdvancedDataGridRenderProvider
在满足某些条件时有条件地显示图像。我目前正在使用
ToolTipManager
在用户将鼠标移到图像上时显示其他信息

以下是我想做的:

当用户将鼠标放在图像上时,我不想显示
工具提示
,而是希望每当图像在
AdvancedDataGrid
中可见时,自动显示
工具提示
。如果用户在
AdvancedDataGrid
中滚动,则
工具提示应随之移动并跟随其图像

AdvancedDataGrid示例:

<mx:AdvancedDataGrid id="myAdvancedDataGrid" 
                        displayItemsExpanded="true"
                        allowMultipleSelection="false"
                        dataProvider="{myTreeData}"
                        draggableColumns="false"
                        depthColors="{[0xD6E5FF,0xFFFFFF]}"
                        folderClosedIcon="{null}" folderOpenIcon="{null}" defaultLeafIcon="{null}">
    <mx:columns>
        <mx:AdvancedDataGridColumn id="colID" headerText="ID" dataField="myID"/>
        <mx:AdvancedDataGridColumn id="colComments" headerText="Comments" dataField="comments"/>
    </mx:columns>
    <mx:rendererProviders>
        <mx:AdvancedDataGridRendererProvider column="{colComments}" depth="2" dataField="comments" renderer="com.whatever.AdvancedDataGridCommentsRenderer" />
    </mx:rendererProviders>
</mx:AdvancedDataGrid>

以及当前的AdvancedDataGridRenderProvider:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         paddingLeft="2" paddingRight="2" paddingTop="2"
         horizontalScrollPolicy="off"
         verticalScrollPolicy="off"
         height="22"
         horizontalAlign="center">
    <fx:Script>
        <![CDATA[
            import mx.controls.ToolTip;
            import mx.events.FlexEvent;
            import mx.managers.ToolTipManager;
            [Embed(source="assets/myImage.png")]
            [Bindable]
            private var myIcon:Class;

            private var commentsToolTip:ToolTip;

            override public function set data(value:Object):void
            {
                super.data = value;
                if (value["comments"] != null)
                {
                    if (value["comments"].toString().length > 0)
                    {
                        myImage.visible = true;
                    }
                    else
                    {
                        myImage.visible = false;
                    }
                }
                else
                {
                    myImage.visible = false;
                }

                validateDisplayList();
            }

            private function showToolTip(evt:Event, text:String):void
            {
                var pt:Point = new Point(evt.currentTarget.x, evt.currentTarget.y);

                // Convert the targets 'local' coordinates to 'global' -- this fixes the
                // tooltips positioning within containers.
                pt = evt.currentTarget.parent.contentToGlobal(pt);

                commentsToolTip = ToolTipManager.createToolTip(text, pt.x, pt.y, "errorTipAbove") as ToolTip;
                commentsToolTip.setStyle("borderColor", "#ff0000");
                commentsToolTip.setStyle("color", "white");
                var yOffset:int =  commentsToolTip.height + 5;
                commentsToolTip.y -= yOffset;
                commentsToolTip.x -= 5;
            }

            // Remove the tooltip
            private function killToolTip():void
            {
                ToolTipManager.destroyToolTip(commentsToolTip);
            }
        ]]>
    </fx:Script>
    <mx:Image id="myImage" 
              source="{myIcon}" 
              mouseOver="showToolTip(event, data['comments'].toString())" 
              mouseOut="killToolTip()" />
</mx:HBox>

0)
{
myImage.visible=true;
}
其他的
{
myImage.visible=false;
}
}
其他的
{
myImage.visible=false;
}
validateDisplayList();
}
私有函数showToolTip(evt:Event,text:String):void
{
var pt:Point=新点(evt.currentTarget.x,evt.currentTarget.y);
//将目标“本地”坐标转换为“全局”——这将修复
//在容器中定位的工具提示。
pt=evt.currentTarget.parent.contentToGlobal(pt);
commentsToolTip=ToolTipManager.createToolTip(文本,pt.x,pt.y,“ErrorTipBove”)作为工具提示;
commentsToolTip.setStyle(“borderColor”,简称“ff0000”);
commentsToolTip.setStyle(“颜色”、“白色”);
变量yOffset:int=commentsToolTip.height+5;
commentsToolTip.y-=yOffset;
p.x-=5;
}
//删除工具提示
私有函数killToolTip():void
{
工具提示管理器。销毁工具提示(commentsToolTip);
}
]]>

有什么建议吗?

如果在显示图像的所有时间都需要显示工具提示,那么它实际上不是您需要的工具提示,在这种情况下,您应该只向项目渲染器添加画布/文本字段

e、 g


然后将调用更改为myImage.visible到myContainer.visible

但是,对于快速而肮脏的修复,您已经拥有了所需的一切,只需在set data override(设置数据覆盖)中进行调用:

        override public function set data(value:Object):void
        {
            super.data = value;
            if (value["comments"] != null)
            {
                if (value["comments"].toString().length > 0)
                {
                    myImage.visible = true;
                    showToolTip(<params>);
                }
                else
                {
                    myImage.visible = false;
                    killToolTip(<params>);
                }
            }
            else
            {
                myImage.visible = false;
            }

            validateDisplayList();
        }
覆盖公共功能集数据(值:对象):无效
{
super.data=值;
if(值[“注释”]!=null)
{
如果(值[“注释”].toString().length>0)
{
myImage.visible=true;
showToolTip();
}
其他的
{
myImage.visible=false;
工具提示();
}
}
其他的
{
myImage.visible=false;
}
validateDisplayList();
}

感谢您的回复!我不赞成使用工具提示。如果有更好的方法或组件,我愿意接受。我在您的解决方案中可能看到的唯一问题是,在设置数据时会创建工具提示,但是当用户开始在数据网格中滚动时会发生什么?行将滚动,但工具提示气泡将保持在创建时的位置,不是吗?我已更新了答案,以包含第一个实现的示例,您可能希望将其更改为显示所需的方式,但它应该会让您了解它。如果不测试工具提示是否会移动,我不确定,但我想你是对的,它不会移动。
        override public function set data(value:Object):void
        {
            super.data = value;
            if (value["comments"] != null)
            {
                if (value["comments"].toString().length > 0)
                {
                    myImage.visible = true;
                    showToolTip(<params>);
                }
                else
                {
                    myImage.visible = false;
                    killToolTip(<params>);
                }
            }
            else
            {
                myImage.visible = false;
            }

            validateDisplayList();
        }