Какой самый простой способ создать расширяемый пользовательский контейнер во Flex? - PullRequest
1 голос
/ 21 апреля 2010

Я хочу создать контейнерный компонент MXML, который имеет свой собственный хром - стандартный дисплей запросов и т. Д. - и который поддерживает добавление к нему дочерних компонентов. Что-то очень похожее на существующий класс mx: Panel, который включает метку заголовка, но действует как обычный mx: Box в отношении добавления дочерних элементов.

Какой самый простой способ сделать это?

Edit:

Чтобы было ясно, я хочу иметь возможность расширять контейнер с помощью MXML, поэтому проблема "Несколько визуальных дочерних элементов" актуальна.

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Расширить контейнер и добавить метку заголовка. Вероятно, <mx:Canvas/> будет работать здесь. Сделайте title общедоступной переменной и включите переменную для styleName метки.

Затем переопределите метод addChild(), чтобы любой добавленный дочерний элемент был добавлен вместо этого в ваш контейнер.

Оставьте достаточно места для вашего заголовка, когда вы поместите свой элемент Box (то есть, дайте его свойству y достаточно места. Если заголовка нет, вы можете захотеть освободить это пространство.

Это основы. Настройте по своему вкусу.

ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ: сначала я создаю класс ActionScript, расширяя контейнер, на который нацеливаюсь, и добавляю «мебель» - элементы, которые класс всегда будет использовать, например, заголовок в вашем случае - переопределяя createChildren позвонив по номеру super.addChild(item) Вызов addChild с этого момента, даже в разметке MXML , добавляет элементы во внутренний контейнер.

0 голосов
/ 21 апреля 2010

Мы делаем это с состояниями.

Мы помещаем chrome для базового контейнера в состояние (в элементах mx: AddChild) и затем используем событие initialize для переключения в это состояние при создании элемента управления.Затем весь хром добавляется в контейнер.

Это позволяет обойти множество проблем с визуальными дочерними элементами.

Недостатки этого подхода:

  • Вы не видите Chrome при редактировании потомков базы.

  • Вы не можете напрямую получить доступ к родительским элементам управления Chrome из дочерних компонентов, поскольку их нет во время компиляции (вместо этого вам нужно определить свойства, методы или события на базе, к которой могут обращаться потомки)

Однако это хорошо работает для нас.

...