我目前正在开发一个扩展Canvas的自定义组件(我们称之为SuperCanvas);它基本上是一个让你放大和缩放的容器。平息其内容。
解释原因太长了,但是我不能使用scrollRect,所以我被迫在我的SuperCanvas中声明一个Canvas对象(名为 innerCanvas )...(我知道,不是很好= /)
我想知道是否有一种正确的方法可以在此画布中“重定向”组件子项的创建。
让我解释一下:
<comp:SuperCanvas id="superCanvas">
<mx:Image id="img" source="image.jpg"/>
<mx:Label id="lbl" text="Sample"/>
</comp:SuperCanvas>
有了这个,img和lbl被添加到我的SuperCanvas中。我希望将它们添加到 superCanvas.innerCanvas 中。
我无法覆盖add / removeChild方法来执行“重定向”,因为我无法添加此 innerCanvas ...
所以我尝试了这个:
<comp:SuperCanvas>
<comp:innerCanvas>
<mx:Image id="img" source="image.jpg"/>
<mx:Label id="lbl" text="Sample"/>
</comp:innerCanvas>
</comp:SuperCanvas>
但Flex抱怨“在'内容'的初始化器中:键入mx.controls.Image不能分配给目标类型mx.containers.Canvas ”。我读过我可以使用带有 [ArrayElementType] 元标记的UIComponents数组,并手动实例化对象,但我正在寻找一种更简单(也可能是正确的)解决方案。
我还看到了childDescriptor属性(其中包含MXML文件中定义的每个子对象的描述),但它是只读的,所以我无法将它传递给我的 innerCanvas 。
如果我不够清楚,请毫不犹豫地问我精确,英语不是我的母语,所以很难解释好的事情= /
任何帮助都会非常感激,我完全陷入困境。
编辑: 我的SuperCanvas类(减去导入和缩放和平移逻辑在这里无关紧要):
public class SuperCanvas extends Canvas
{
public innerCanvas:Canvas = new Canvas();
public function SuperCanvas()
{
super();
addChild( innerCanvas );
}
}
答案 0 :(得分:1)
这个blog entry详细介绍了一种向SuperCanvas添加组件的方法,但是在创建之后将它们全部移动到内部画布。这就是一个解决方法。
或者,您可以将DefaultProperty
设置为dataProvider
- 类型对象,然后从那里将内容添加到内部画布,而不是首先将它们作为SuperCanvas的子项。
增加:
我遇到了这个blog entry,其中讨论了Panel
组件以及它如何处理这个问题。您可以查看它并使用Panel
源代码。