【发布时间】:2011-07-10 05:12:44
【问题描述】:
我有一个组件,其中包含一个实现自定义渲染器的列表。我将此组件用作工具提示,将其保留在内存中,并根据需要更改数据绑定。
类似这样,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,则组件会暂时显示大于所需大小,然后将自身调整为更小。
我想做的是让组件在显示之前自行调整大小,所以我在屏幕上看不到调整大小。关于如何实现这一点的任何想法?
【问题讨论】:
-
工具提示的大小在哪里设置?在哪里改变它的大小?还是会自动改变?将 mc 组件(Canvas)与 spark 组件混合使用也让我觉得很不寻常。
-
混合组件似乎工作正常。大小是自动确定的。
-
混合组件集通常可以正常工作,但这是不寻常的方法,尤其是在您的情况下,一个组可能很容易替换 Canvas。 “自动确定大小”可能意味着您正在使用的组件之一中的某些代码确定了大小。您必须找到该代码并覆盖它。在这种情况下,我可能会看一下“TTComponent”的measure方法。
-
不,我不这么认为。我自己编写了所有代码,没有指定高度。您的建议如何帮助在更改数据绑定后在显示之前调整组件大小?我没有听从你的推理。
-
在您的代码中,我看到了六个左右的 Flex Framework 组件,我怀疑其中包含大量不是您自己编写的代码。 Flex 容器使用 Flex Component LifeCycle 方法来调整和定位它们的子容器。我相信在该代码的某个地方,弹出窗口正在调整大小。如果我不得不猜测;修改自定义 Canvas 的测量方法将解决该问题。但是,我只是猜测。由于您没有设置明确的大小;通常组件的“父级”将决定制作它的大小——使用measuredHeight和measuredWidth值
标签: actionscript-3 apache-flex flex4 flex4.5 flex-spark