代码之家  ›  专栏  ›  技术社区  ›  VoidPointer

中继器内的组件未按预期调整大小

  •  1
  • VoidPointer  · 技术社区  · 14 年前

    我有一个MXML面板,在其中使用中继器。面板可以水平调整大小,我希望重复的组件与面板一起调整大小。下面是一个简单的例子,说明事情的样子:

    <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" ...>
        <!-- scripts and some controls -->
        <mx:VBox width="100%">
            <core:Repeater width="100%" dataProvider="model">
                <ns1:MyItemRenderer width="100%" />
            </core:Repeater>
        </mx:VBox>
    </mx:TitleWindow>
    

    当我调整组件的大小时,重复项的宽度不会改变。

    还有按钮和事件处理程序,用于添加和删除模型中的项。完成此操作后,转发器将更新以显示正确的项目数,并且所有项目的大小都将正确调整。

    在调整根面板的大小时,我无法调整项目的大小。我可以看到,中继器周围的vbox正在得到一个调整大小的事件。但是,重复的项目没有得到事件。我尝试从连接到vbox的调整大小处理程序手动将调整大小事件分派给重复的项目,但这没有帮助。

    我还尝试在arraycollection中添加和删除一个虚拟项,它是数据提供程序(因为它会触发正确的调整大小,否则如上所述),但是,在vbox的调整大小处理程序中这样做只会导致转发器根本不显示任何项。

    有没有办法让中继器中的项目与其封闭容器一起调整大小?

    在mx:列表中使用时,我正在使用的项渲染器会正确调整大小。它的构建是为了在转发器中使用时能够同时使用由列表容器getRepeaterItem()设置的数据属性。在这种特殊情况下,我不能将列表用作容器,因为它在通过行数、高度和maxheight属性控制其高度方面的行为在这种特殊情况下不适用(我不提供详细信息)。

    2 回复  |  直到 14 年前
        1
  •  0
  •   JeffryHouser    14 年前

    重写标题窗口中的UpdateDisplayList,当高度或宽度更改时,将使在中继器中创建的每个项上的DisplayList无效。

    也就是说,使用中继器通常被认为是不好的做法,因为中继器中的每个组件都被渲染了。一个基于列表的类——它使用了渲染器重新排队——被认为性能更好。

    基于您的代码段,我无法判断您的代码是否可以在没有中继器的情况下重新工作。

        2
  •  0
  •   VoidPointer    14 年前

    作为记录,我想出了以下“解决方案”:

    对包含中继器的框使用maxheight属性,将其绑定到从其他组件派生正确值的表达式…如果我不想把中继器从封闭的面板中推出,我仍然需要硬编码任何我想保留的空间,以便放在包含中继器的盒子之后的组件,但现在已经足够好了。

    基本上:

    <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" ...>
        <!-- scripts and some controls -->
        <mx:VBox id="outerBox" height="100%">
            <mx:VBox id="innerBox" width="100%"
                     maxHeight="{outerBox.height - innerBox.y - 40}"> 
                     <!-- reserve 40 px for the button -->
                <core:Repeater width="100%" dataProvider="model">
                    <ns1:MyItemRenderer width="100%" />
                </core:Repeater>
            </mx:VBox>
            <mx:Button label="Stay Visible"/>
        </mx:VBox>
    </mx:TitleWindow>
    
    推荐文章