Adobe Flex - отображение визуального элемента из HostComponent в MXML

У меня есть SkinnableComponent:

public class ContentView extends SkinnableComponent
{       
    [Bindable]
    public var titleBar:IVisualElement;

    public function ContentView(pContentXML:XML)
    {
        this.setStyle("skinClass", ContentViewSkin );
    }
}

и теперь я хочу отобразить titleBar в файле скина mxml.

    <?xml version="1.0" encoding="utf-8"?>
    <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">

<fx:Metadata>   
      [HostComponent("EMM.App2Go.Viewer.Component.ContentView")]
</fx:Metadata>

<s:DataGroup width="100%" >
    <s:dataProvider>
        <s:ArrayList source="{hostComponent.titleBar}" />
    </s:dataProvider>
</s:DataGroup>  

как вы можете видеть, я справился с этим с помощью DataGroup, но это немного уродливо, и я думал о более простом способе сделать это, как

<fx:Object source="hostComponent.titleBar" />

или что-то типа того.

Я надеюсь, что вы можете мне помочь.

1 ответ

Решение

Похоже, вы глубоко не понимаете, как должна работать модель Spark SKinning. Вы не должны ссылаться на hostComponent из скина для отображения элементов. Вы должны создать элемент в скине; и использовать то же имя. Так что, если hostComponent имеет часть скина, определенную следующим образом:

[Bindable]
[SkinPart]
public var titleBar:IVisualElement;

кожа должна иметь что-то вроде этого:

<s:DataGroup width="100%" id="titleBar" >
</s:DataGroup>

Я предлагаю прочитать эту информацию о Spark Skinning, а также изучить Component LifeCycle.

Другие вопросы по тегам