2012-04-10 6 views
2

イメージコンポーネントやボタンバーなどの子コンポーネントを持つSkinnableコンテナがいくつかあります。スキンを追加するとSkinnableコンテナが大きく見えるようですそのコンテナのすべての子コンポーネントが消えるようです。フレックス: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"); 
} 

上記の例では、Skinはうまく動作しますが、SkinnableContainerに含まれる画像は消えます。

+0

あなたしているコードサンプルが非常に切り捨てられます。私はあなたがしようとしていることの完全な延長を掴んでいるとは思わない。 – JeffryHouser

+1

各パーツの完全なコードを投稿することができます。また、必要なスキンパーツとしてマークされていない場合は、スキン内のコンポーネントから一部のパーツを除外することもできます(これはあまりにも私もまだどちらかです)http://www.adobe.com/devnet/flex/articles/dynamic_skin_parts.html – shaunhusain

+0

私は完全なコードを更新しました。これが私の問題を明確にするのに役立ちます。ありがとう。 – user1210003

答えて

0

あなたの肌にはcontentGroupのスキンパーツがないようです。面白いことに、SkinnableContainerのようなコンポーネントでは、コンテンツグループが必要と思っていたでしょう。悲しいかな、そうではありません。

は、お肌にこれを追加します。

<s:Group id="contentGroup" /> 

そして今、「contentGroupの皮膚の一部が存在することを、「SkinnableContainer」はそれにあなたの子オブジェクトを追加することができる必要があります。

+0

Sunilありがとう、それは私がスキンを作成するたびにこのコード行を追加する必要がありますか? – user1210003

+0

SkinnableContainerのスキンを作成するたびに、これを追加する必要があります。各スキン可能コンポーネントには、「スキン部品」の要件があります。 Flash Builderを使用してMXMLスキンを作成すると、スキンパーツが何であるか、必須かどうかを示すコメントが追加されます: '<! - SkinParts name = contentGroup、type = spark.components .Group、required = false - > 'この部分は必須ではありませんが、肌はそれが無ければ役に立たないようです。 –

0

私は同じ問題を抱えていましたが、これを行う別の方法はありませんでした。問題は画像がスキンの一部とみなされることです。スキンクラスのソースを設定すると、それは私のために働いた。

<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> 
関連する問題