我不确定这是否可行,有没有办法让<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 = 0
和submitBtn.height
= 21.身高听起来合理,但我知道submitBtn.y
不能为0,因为它是低于其他几个
是否可以动态设置表单高度?
答案 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);
}
...
}