В настоящее время я работаю над пользовательским компонентом, который расширяет Canvas (назовем его SuperCanvas); это в основном контейнер, который позволяет вам масштабировать и панорамировать его содержимое.
Было бы слишком долго объяснять почему, но я не могу использовать 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 .
Я не могу переопределить методы 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 ». Я прочитал, что могу использовать массив UIComponents с мета-тегом [ArrayElementType] и вручную создавать объекты, но я ищу более простое (и, вероятно, правильное) решение.
Я также видел свойство childDescriptor (которое содержит описания для каждого дочернего элемента, определенного в файле MXML), но оно доступно только для чтения, поэтому я не могу передать его моему innerCanvas .
Если я не достаточно ясен, не стесняйтесь спрашивать меня о точности, английский не является моим родным языком, поэтому довольно сложно хорошо объяснить вещи = /
Любая помощь будет принята с благодарностью, я полностью застрял.
EDIT:
Мой класс SuperCanvas (без учета импорта и логики масштабирования и панорамирования, которые здесь не имеют значения):
public class SuperCanvas extends Canvas
{
public innerCanvas:Canvas = new Canvas();
public function SuperCanvas()
{
super();
addChild( innerCanvas );
}
}