2012-04-10 22 views
2

我有几个Skinnable容器有儿童组件,例如图像组件或按钮栏等。看起来,当我添加皮肤时,Skinnable容器看起来很棒,但那个容器的所有儿童组件似乎都消失了。Flex:当SkinnableContainer蒙皮时儿童组件会消失

Example: 
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"> 

    <!-- host component --> 
    <fx:Metadata> 
      [HostComponent("path.to.skin.MySkinnableContainer")] 
    </fx:Metadata> 

    <s:states> 
     <s:State name="disabled" /> 
     <s:State name="normal" /> 
    </s:states> 

    <mx:Image source="@Embed('path.to.skin.AllSkinArt.swf#SkinArt')" includeIn="normal"/> 

    <!-- SkinParts 
    name=contentGroup, type=spark.components.Group, required=false 
    name=contentGroup, type=spark.components.Group, required=false 
    --> 
</s:Skin> 

将被剥皮的组件,有一个图像组件在皮肤上消失。

<s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         width="116" height="74" 
         addedToStage="onAddedToStage(event)"> 

<fx:Script> 
    <![CDATA[ 

     [Bindable] 
     private var _screenShot:Bitmap; 

     public function updateScreenShot(screenShot:Bitmap):void 
     { 
      _screenShot = screenShot; 

     } 

     protected function onAddedToStage(event:Event):void 
     { 
      //do not want the mouse to interact with this object. 
      this.mouseEnabled = false; 
     } 
    ]]> 
</fx:Script> 

<s:Image 
    width="115" 
    height="82" 
    x="-8" 
    y="-109" 
    source="{_screenShot}"/> 
</s:SkinnableContainer> 

在CSS文档中我有以下代码行来设置外观。

wd|MySkinnableContainer 
{ 
    skinClass: ClassReference("path.to.MySkinnableContainerSkin"); 
} 

在上面的例子中,皮肤工作得很好,但SkinnableContainer中包含的图像将消失。

+0

你的代码示例是非常截断;我不认为我正在抓住你想要做的事情的全部范围。 – JeffryHouser 2012-04-10 19:20:07

+1

同意你可以发布每个零件的完整代码,如果它们没有标记为必需的皮肤零件,你也可能会从皮肤中的零部件中排除一些零件(这只是一个猜测,并没有与这么多我还没有)http://www.adobe.com/devnet/flex/articles/dynamic_skin_parts.html – shaunhusain 2012-04-10 19:58:18

+0

我更新为完整的代码,希望这有助于澄清我的问题。谢谢。 – user1210003 2012-04-12 15:55:28

回答

0

它看起来像你的皮肤缺少contentGroup皮肤部分。很有趣,对于像SkinnableContainer这样的组件,我会认为内容组是必需的。唉,事实并非如此。

添加到您的皮肤:

<s:Group id="contentGroup" /> 

而现在的“contentGroup的”皮肤的一部分存在,“SkinnableContainer”应该能够增加你的孩子反对它。

+0

Sunil谢谢,就是这样,我需要在我创建皮肤的任何时候添加这行代码? – user1210003 2012-04-12 16:18:14

+0

无论何时您为SkinnableContainer创建皮肤,您都需要添加此选项。每个skinnable组件都有自己的要求,因为它是“皮肤部件”。当您使用Flash Builder创建MXML皮肤时,它会添加一些如下所示的注释,告诉您皮肤部件是什么,以及是否需要它们:'<! - SkinParts name = contentGroup,type = spark.components .Group,required = false - >'请注意,这部分不是必需的,但它是奇怪的b/c皮肤似乎没用它:) – 2012-04-12 22:25:31

0

我遇到了同样的问题,并ound了另一种方式做到这一点,我想问题是,图像被认为是皮肤的一部分。在皮肤类中设置源使它对我有用。

<s:SkinnableContainer> 

<fx:Script> 
    <![CDATA[ 

     [Bindable] 
     public var imageSource:String; 
     .................... 

    ]]> 
</fx:Script> 
    <s:Image id="sampleImg"/> 

</s:SkinnableContainer> 

<s:Skin> 

    <s:Image id="sampleImg" source="{hostcomponent.imageSource}"/> 

</s:Skin>