在Flex中创建可扩展自定义容器的最简单方法是什么?

时间:2010-04-21 15:12:48

标签: flex flex3 mxml

我想创建一个MXML容器组件,它具有一些自己的chrome - 标准查询显示等,并且支持向其添加子组件。与现有的mx:Panel类很相似,它包含一个标题标签,但就像添加子项一样,它就像一个普通的mx:Box。

最简单的方法是什么?

修改

要清楚,我希望能够使用MXML扩展容器,因此“多个视觉孩子”问题是相关的。

2 个答案:

答案 0 :(得分:1)

扩展容器并添加标题标签。可能<mx:Canvas/>可以在这里工作。将标题设为公共变量,并为标签的 styleName 添加变量。

然后覆盖addChild()方法,以便将添加的任何子项添加到您的容器中。

当您放置Box元素时,为您的标题留出足够的空间(即,为其y属性提供足够的空间。如果没有标题,您可能想要回收该空间。

这是基础知识。根据您的内心定制。

编辑添加:我首先创建一个ActionScript类,扩展我所定位的容器,并添加“furniture” - 类将始终使用的项目,如您的案例中的title - 通过覆盖{{1}并为这些项目调用createChildren。从此开始调用super.addChild(item)即使在MXML标记中,也会将项目添加到内部容器中。

答案 1 :(得分:0)

我们这样做是为了各州。

我们将基本容器的chrome置于某个状态(在mx:AddChild元素中),然后在创建控件时使用initialize事件切换到该状态。然后将所有铬添加到容器中。

这解决了多组视觉儿童问题。

这种方法的缺点是:

  • 编辑基地的后代时,您看不到镶边。

  • 您无法直接访问后代组件中的父级chrome控件,因为它们在编译时不存在(相反,您需要在后代可以访问的基础上定义属性,方法或事件)

然而,它对我们很有用。