Пользовательский компонент Flex 4 с дочерними элементами, вставляемыми непосредственно в стек представлений - PullRequest
2 голосов
/ 24 июня 2010

Я сдаюсь. Надеюсь, я просто что-то упустил, но чувствую, что дергаю зубами, пытаясь заставить это работать. Все, что я хочу, это пользовательский компонент 'wizard', чьи дочерние элементы размещаются внутри ViewStack, а под ViewStack есть кнопка «Далее» и «Назад». Вот некоторые выдержки из кода, иллюстрирующие мой подход:

WizardGroup.as:

    [SkinPart(required="true")]
    public var nextBt:Button = new Button();

    [SkinPart(required="true")]
    public var backBt:Button = new Button();

    [SkinPart(required="true")]
    public var stack:ViewStackSpark = new ViewStackSpark();

WizardGroupSkin.mxml:

       <s:VGroup width="100%" height="100%"
                  paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10">
            <container:ViewStackSpark id="stack" width="100%" height="100%">
                <s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0"/>
            </container:ViewStackSpark>
            <s:HGroup horizontalAlign="right" width="100%">
                <s:Button id="nextBt" label="Next" enabled="{hostComponent.permitNext}" enabled.last="false"/>
                <s:Button id="backBt" label="Back" enabled="{hostComponent.permitBack}" enabled.first="false"/>
            </s:HGroup>
        </s:VGroup>

Хотя это очень близко к работе, основная проблема заключается в том, что дочерние элементы компонента WizardGroup не добавляются как дочерние элементы стека просмотра. Вместо этого они добавляются как дочерние элементы группы содержимого. Таким образом, у стека просмотра всегда будет только один дочерний элемент: contentGroup.

Я также попробовал подход связывания содержимого стека представлений с дочерними элементами contentGroup, но в контейнерах Spark нет доступа к массиву дочерних элементов или массиву элементов (т. Е. Отсутствует contentGroup.getChildren. () или contentGroup.getElements ())

Есть идеи? Спасибо всем.

1 Ответ

2 голосов
/ 24 июня 2010

Я наконец понял это. Хитрость заключается в том, чтобы установить для свойства WizardGroup по умолчанию открытый массив членов, который я называю «content»

[DefaultProperty("content")]
public class WizardGroup extends TitleWindow
{
    [SkinPart(required="true")]
    public var nextBt:Button = new Button();

    [SkinPart(required="true")]
    public var backBt:Button = new Button();

    [Bindable]
    public var content:Array;

А затем в скине свяжите содержимое стека просмотра с массивом содержимого hostComponent:

        <s:VGroup width="100%" height="100%"
                  paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10">
            <container:ViewStackSpark id="stack" width="100%" height="100%" content="{hostComponent.content}"/>
            <s:HGroup horizontalAlign="right" width="100%">
                <s:Button id="nextBt" label="Next" enabled="{hostComponent.permitNext}" enabled.last="false"/>
                <s:Button id="backBt" label="Back" enabled="{hostComponent.permitBack}" enabled.first="false"/>
            </s:HGroup>
        </s:VGroup>
...