如何在转发器项目上设置动态宽度百分比?

How do I set a dynamic width percentage on repeater items?

我有一个使用对象数组作为数据提供者的中继器。对于每个对象,我想在容器内创建一个标签。即使标签太长无法显示,每个容器的大小也应相同。

<mx:HBox width="100%">
    <mx:Repeater id="repeater" dataProvider="{objList}"> 
        <mx:Box width="11%" verticalAlign="middle" horizontalAlign="center">
            <mx:Label text="{repeater.currentItem.Text}" width="100%" textAlign="center" truncateToFit="true"/>
        </mx:Box>
    </mx:Repeater>
</mx:HBox>

如果我知道列表有 9 个项目,我可以将宽度设置为 11% 并且很高兴。但我希望能够处理 6-15 项的列表。

我考虑过将框的宽度设置为函数的结果,但宽度不接受字符串结果。返回一个数字只会将其设置为准确的宽度而不是百分比。

<mx:Box width="{GetPercent()}" verticalAlign="middle" horizontalAlign="center">

我也考虑过遍历转发器项目来设置 percentWidth,但最好在渲染之前定义宽度。

使用 Spark 标签,您只需将每个标签设置为 100% 宽度并强制其自动截断,如下所示:<s:Label showTruncationTip="true" maxDisplayedLines="1" width="100%"/>。不确定这是否适用于 MX 标签组件。对于 Spark 组件,设置 maxDisplayedLines 以使截断正常工作也很重要。

因为我没有 spark,所以我最终通过将 Box 替换为 Canvas(将 clipContent 设置为 true)来实现它。奇怪的是,我还必须从标签中删除 width="100%"(当然还要将 horizo​​ntalCenter 设置为 0)。

<mx:Repeater id="repeater" dataProvider="{objList}"> 
    <mx:Canvas verticalScrollPolicy="off" horizontalScrollPolicy="off" clipContent="true">
        <mx:Label text="{repeater.currentItem.Text}" horizontalCenter="0" textAlign="center"/>
    </mx:Canvas>
</mx:Repeater>