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

Apache flex 什么';在Flex中创建可扩展自定义容器的最简单方法是什么?,apache-flex,flex3,mxml,Apache Flex,Flex3,Mxml,我想创建一个MXML容器组件,它有一些自己的chrome——一个标准的查询显示,等等——并且支持向其中添加子组件。与现有的mx:Panel类非常相似,它包括一个标题标签,但在添加子项时,它的行为类似于一个普通的mx:Box 最简单的方法是什么 编辑: 为了清楚起见,我希望能够使用MXML扩展容器,因此“多个可视子对象”问题是相关的。扩展容器并添加标题标签。可能会在这里工作。将标题设置为公共变量,并为标签的样式名包含一个变量 然后重写addChild()方法,以便将添加的任何子项添加到容器中 放置

我想创建一个MXML容器组件,它有一些自己的chrome——一个标准的查询显示,等等——并且支持向其中添加子组件。与现有的mx:Panel类非常相似,它包括一个标题标签,但在添加子项时,它的行为类似于一个普通的mx:Box

最简单的方法是什么

编辑:


为了清楚起见,我希望能够使用MXML扩展容器,因此“多个可视子对象”问题是相关的。

扩展容器并添加标题标签。可能
会在这里工作。将标题设置为公共变量,并为标签的样式名包含一个变量

然后重写
addChild()
方法,以便将添加的任何子项添加到容器中

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

这是最基本的。根据您的心意进行定制


编辑为添加:我首先创建一个ActionScript类,扩展目标容器,然后通过覆盖
createChildren
并调用
super.addChild(项),添加“家具”——类将始终使用的项目,如您的案例中的标题
用于这些项目。从那时起调用
addChild
,即使在MXML标记中,也会将项目添加到内部容器。

扩展容器并添加标题标签。
可能会在这里起作用。将标题设为公共变量,并为标签的样式名包含一个变量

然后重写
addChild()
方法,以便将添加的任何子项添加到容器中

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

这是最基本的。根据您的心意进行定制


编辑为添加:我首先创建一个ActionScript类,扩展目标容器,然后通过覆盖
createChildren
并调用
super.addChild(项),添加“家具”——类将始终使用的项目,如您的案例中的标题
用于这些项目。从那时起调用
addChild
,即使在MXML标记中,也会将项目添加到内部容器中。

我们使用状态执行此操作

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

这就解决了多组视觉子对象的问题

这种方法的缺点是:

  • 在编辑基础的子代时,您不会看到chrome

  • 您不能直接从子代组件访问父chrome控件,因为它们在编译时不在那里(相反,您需要在子代可以访问的基础上定义属性、方法或事件)


然而,它对我们来说很有效。

我们对国家也是如此

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

这就解决了多组视觉子对象的问题

这种方法的缺点是:

  • 在编辑基础的子代时,您不会看到chrome

  • 您不能直接从子代组件访问父chrome控件,因为它们在编译时不在那里(相反,您需要在子代可以访问的基础上定义属性、方法或事件)


但是,它对我们很有效。

我不相信这是可行的,至少如果你想在mxml中指定你的子项,你会得到“为这个容器bug指定了多组可视子项”。@quoo:当然可以,如果你做得对的话。我一直都这样做。你只需省去
super.addChild()
行。但是感谢您的支持。好的,我应该澄清一下,如果您在MXML中定义自定义组件并带有子项,然后在创建组件实例时尝试向该组件添加更多MXML子项,那么这是行不通的。这不是一个非常实用的解决方案。@qoo:也许这对您来说不是一个实用的解决方案,但您是谁您需要判断其他人的需求和环境吗?该组件是在ActionScript类中定义的,但当在MXML组件中用作MXML表现形式时,它工作得非常好。不太清楚您为什么如此生气-您最初的解决方案暗示您要使用MXML,但没有作为MXML组件工作。我认为这不起作用,至少在least如果你想在mxml中指定你的子项,你会得到“已经为这个容器bug指定了多组可视子项”。@quoo:如果你做对了,当然可以。我一直都在做。你只需省去
super.addChild()
行。但是感谢您的支持。好的,我应该澄清一下,如果您在MXML中定义自定义组件并带有子项,然后在创建组件实例时尝试向该组件添加更多MXML子项,那么这是行不通的。这不是一个非常实用的解决方案。@qoo:也许这对您来说不是一个实用的解决方案,但您是谁您需要判断其他人的需求和环境吗?该组件是在ActionScript类中定义的,但在MXML组件中用作MXML表现形式时,它工作得非常好。不太清楚您为什么如此生气-您最初的解决方案暗示您要使用MXML,但没有作为MXML组件工作。