Flex动态表单高度

时间:2010-03-17 20:08:59

标签: flex actionscript adobe mxml

我不确定这是否可行,有没有办法让<mx:Form>根据其中元素的位置设置自己的高度?

例如:

<mx:Form height="{submitBtn.y + submitBtn.height}">

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>
       <s:Button id="submitBtn" label="Submit" /> 
   </mx:FormItem>

</mx:Form>

其中表单height是根据submitBtn的y位置及其高度动态设置的。

我尝试使用Alert.show来显示这些值,结果显示submitBtn.y = 0submitBtn.height = 21.身高听起来合理,但我知道submitBtn.y不能为0,因为它是低于其他几个

是否可以动态设置表单高度?

4 个答案:

答案 0 :(得分:2)

是。在测量方法中执行:

private var n:Number = 0;
override protected function measure() : void {
super.measure();
    if (submitBtn) {
        var fi:FormItem = FormItem(submitBtn.parent);
        n = fi.y + fi.height;
    }
}

然后将高度设置为 n

编辑:我更改了这个以指定包含FormItem,而不是按钮,这是我在我自己的示例代码中首先测试的。您可以获取按钮的父级或为该FormItem提供ID。但这种方式确实有效。

答案 1 :(得分:0)

你的submitBtn.y将始终返回0,因为它是mx:FormItem元素中的y位置(如相对y位置)

因为我猜你想根据表单内按钮的y位置设置表单的y位置。为什么你想要那个?

答案 2 :(得分:0)

查看DisplayObject所有子级可用的localToGlobal()方法。它会将x,y坐标转换为全局x,y。您应该可以在计算中使用它。

答案 3 :(得分:0)

我希望线程没有关闭,因为我遇到了和你一样的问题并找到了正确的解决方案,所以我会尝试解释。

每当我的应用程序启动时,它会读取一个文件并对其进行解析,其中包含一些适合某些表单的信息,并且我会动态创建它们而不指定任何高度或宽度。

我将它们添加到viewStack中,如下所示:

<mx:ViewStack id="viewStack" resizeToContent="true">
</mx:ViewStack>

在组件内部,用于显示某些项目的信息,具体取决于项目的类别,其中一个表格显示符合必要信息。

正如您所注意到的,viewstack在一个属性 resizeToContent 内部,当我从datagrid中选择一个项目时,viewstack会更改selectedIndex(指示另一个表单)并自动更改其大小调整新内容的大小。

如果由于某种原因你需要表格的高度,你可以使用 measuredHeight 属性代替measure()。

我将添加一些用于理解的代码:

onCreationComplete(){
    ...
    for each (var form:Form in DataModel.getForms())
    {
        viewStack.addChild(form);
    }
    ...
}