我有一个包含实现自定义渲染器的列表的组件。我将此组件用作工具提示,将其保留在内存中,并根据需要更改数据绑定。
TTComponent是一个扩展Canvas的类:
<s:TTComponent>
<s:BorderContainer>
<s:List id='lstItems' dataProvider="{data.Items}" width="50%" borderVisible="false" contentBackgroundColor="#222222">
<s:layout>
<s:VerticalLayout useVirtualLayout="false" requestedMinRowCount="1"/>
</s:layout>
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer>
<s:HGroup>
<s:Label text="{data.Value}" paddingLeft="6" />
<s:Label text="{data.Name}" />
</s:HGroup>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
</s:BorderContainer>
</s:TTComponent>
现在,鼠标悬停的驱动程序代码如下所示:
if (tt == null) {
tt = new TTComponent();
}
tt.data = data;
PopUpManager.addPopUp(tt, this);
当然,鼠标出来了:
PopUpManager.removePopUp(tt);
现在,当包含许多项目的数据设置为tt.data时,列表会自行调整大小并显示正常。但是,在此之后,如果包含少量项目的数据设置为tt.data,则组件会暂时显示大于其需要的值,然后将其自身调整为较小。
我想要做的是让组件在显示之前自行调整大小,所以我没有在屏幕上看到调整大小。关于如何做到这一点的任何想法?
答案 0 :(得分:0)
首先,我会强迫您考虑创建一次组件,只是在需要时显示/隐藏/移动它而不是使用弹出管理器。这就是我通常会做的类似于你正在尝试的事情。它会表现得更好,并可能自行解决这个问题。只是一个想法。
其次,在重新绑定新数据后,请尝试以下操作:
告诉它需要调整大小:
tt.invalidateDisplayList();
此外,如果是ArrayCollection,您可能需要告诉它您通过刷新数据来更改数据:
data.refresh();
如果不能解决这个问题,请告诉我。