В настоящее время я работаю над пользовательским компонентом, который расширяет 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>
Таким образом, в мой SuperCanvas добавляются img и lbl. Вместо этого я хочу, чтобы они были добавлены в 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 жалуется, что «В инициализаторе для 'contents': тип mx.controls.Image не может быть назначен целевому типу mx.containers.Canvas». Я читал, что могу использовать массив UIComponents с метатегом [ArrayElementType] и вручную создавать экземпляры объектов, но я ищу более простое (и, вероятно, подходящее) решение.
Я также видел свойство childDescriptor (которое содержит описания для каждого дочернего элемента, определенного в файле MXML), но оно предназначено только для чтения, поэтому я не могу передать его своему innerCanvas.
Если я недостаточно ясен, не стесняйтесь спрашивать меня о точности, английский не мой родной язык, поэтому довольно сложно объяснить вещи хорошо = /
Любая помощь будет принята с благодарностью, я полностью застрял.
РЕДАКТИРОВАТЬ: Мой класс SuperCanvas (без импорта и логики масштабирования и панорамирования, которая здесь не имеет значения):
public class SuperCanvas extends Canvas
{
public innerCanvas:Canvas = new Canvas();
public function SuperCanvas()
{
super();
addChild( innerCanvas );
}
}