2010-01-27 34 views
1

我目前正在开发一个扩展Canvas的自定义组件(我们称之为SuperCanvas);它基本上是一个容器,可以让你放大其内容。在“内部容器”中移动容器(在MXML中定义)的子项

这将是太多时间去解释为什么,但我不能使用scrollRect的,所以我被迫宣布一个Canvas对象(被称为innerCanvas)......我SuperCanvas内(我知道,不是很好= /)

我想知道是否有一种正确的方法来“重定向”在此画布中创建我的组件的子项。

让我解释一下:

<comp:SuperCanvas id="superCanvas"> 
    <mx:Image id="img" source="image.jpg"/> 
    <mx:Label id="lbl" text="Sample"/> 
</comp:SuperCanvas> 

有了这个,IMG和LBL被添加到我的SuperCanvas。我想将它们添加到superCanvas.innerCanvas

我不能覆盖添加/ removeChild之方法做了“重定向”,因为我将无法添加此innerCanvas ...

所以,我想这一点:

<comp:SuperCanvas> 
    <comp:innerCanvas> 
     <mx:Image id="img" source="image.jpg"/> 
     <mx:Label id="lbl" text="Sample"/> 
    </comp:innerCanvas> 
</comp:SuperCanvas> 

但Flex抱怨说:“在'contents'的初始值设定项中:输入mx.controls.Image不能分配给目标类型mx.containers.Canvas”。我读了我可以使用一组UIComponents与[ArrayElementType]元标签,并手动instanciate对象,但我正在寻找一个简单(可能是适当的)解决方案。

我也看到了childDescriptor属性(其中包含用于描述在MXML文件中定义的每一个孩子),但它是只读的,所以我不能把它传递给我的innerCanvas

如果我不够清晰,不要犹豫,问我精度,英语不是我的母语,所以这是非常难以解释的事情做好=/

任何帮助将不胜感激,我完全卡住了。


编辑: 我SuperCanvas类(减去进口不要紧这里变焦&泛逻辑):

public class SuperCanvas extends Canvas 
{ 
    public innerCanvas:Canvas = new Canvas(); 

    public function SuperCanvas() 
    { 
     super(); 
     addChild(innerCanvas); 
    } 
} 
+0

SuperCanvas,innerCanvas是什么类的定义? – Patrick 2010-01-27 20:30:15

+0

我用定义编辑了我的问题。 – 2010-01-28 14:02:09

回答

1

blog entry详细说明了组件添加到SuperCanvas的方法,但在创建后将它们全部移动到内部画布。所以这是一个解决方法。

或者,您可以将DefaultProperty设置为dataProvider-类型的对象,然后将内容添加到内部画布中,而不是先将其作为SuperCanvas的子项。

增加:

我碰到这个blog entry其中,除其他事项外,有关Panel组件以及如何谈判是处理这个问题跑了。您可以看看它以及Panel源代码。

+0

非常感谢您的帮助! 我尝试了jocabola.blog的解决方案,这看起来相当不错。但是,通过这种方法,我无法访问我的* innerCanvas * CREATION_COMPLETE事件(我需要检索它的宽度和高度)。 在addComponents()方法的末尾,my * innerCanvas *的宽度和高度都等于0. – 2010-01-28 09:38:34

+0

嗯。你可以在[内部或外部]容器上调用'validateNow'来迫使它通过运动? – 2010-01-28 15:13:07

+0

我试过了,但现在看来我面临另一个问题;宽度和高度属性保持等于0.问题是我放在画布中的图像组件在这一点上还没有完成加载。我重写了Image类,以便在加载完成后(当其宽度和高度属性可用时)才分派其creationComplete事件。但是我明白了,Flex容器不会等待他们的孩子发送他们自己的creationComplete事件来发送它们(不知道我很清楚,对不起= /)顺便提一下,这是另一个问题。非常感谢! – 2010-01-28 15:31:06