0

我有一个组件,其中包含一个实现自定义渲染器的列表。我将此组件用作工具提示,将其保留在内存中,并根据需要更改数据绑定。

像这样的东西,其中 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,则组件会暂时显示大于所需大小,然后将自身调整为更小。

我想做的是让组件在显示之前自行调整大小,所以我看不到屏幕上的调整大小。关于如何做到这一点的任何想法?

4

1 回答 1

0

首先,我会强迫您考虑创建一次组件并在需要时显示/隐藏/移动它,而不是使用弹出管理器。这就是我通常会做类似于你正在尝试的事情的方式。它会表现得更好,并且可能会自行解决此问题。只是一个想法。

其次,在你重新绑定新数据之后,试试这些:

告诉它需要调整大小:

tt.invalidateDisplayList();

此外,如果是 ArrayCollection,您可能需要通过刷新数据来告诉它您更改了数据:

data.refresh();

让我知道这是否不起作用。

于 2011-07-11T01:04:53.640 回答