2011-07-04 5 views
0

現在のアプリケーションに含まれるすべてのスキンクラスのリストを取得する方法はありますか?私はFlex 4.5.1を使用しています。ここで 現在のアプリケーションのすべてのスキンクラスのリストを取得する方法はありますか?

は、私はすべてのスキンを取得するには、今使っているループを、ある

  for each (var item:Object in styleManager.typeHierarchyCache) { 

       for (label in item) { 

        if (label=="spark.components.supportClasses.Skin" || 
         label=="spark.skins.mobile.supportClasses.MobileSkin") { 

         for (label in item) { 
          name = label.substr(label.lastIndexOf(".")+1); 
          vo = new SkinObject(); 
          vo.name = name; 
          vo.qualifiedName = label; 
          dictionary[label] = vo; 
         } 
         break; 
        } 

       } 

      } 

      for each (item in dictionary) { 
       array.push(item); 
      } 

理由、なぜ私は、アプリケーション内のすべてのスキンをリストアップしてから適用することができるようにしたいので、ですそれらはリアルタイムで表示されるので、私は彼らがどのように見えるかを見ることができます。 *私はこの作業をしていますが、より良い方法を望んでいました。

+0

FlashBuilderまたは一般的な意味ですか? – RIAstar

+0

AS3の使用。私はすべてのクラスを最終的なSWFにコンパイルする方法を知らない。たとえあなたができたとしても。スキンクラスと非スキンクラスの違いをどのように定義しますか? ActionScriptスキンをサポートするW/4.5.1。すべてのスキンの親であるSparkSkinクラスに100%依存することはできません。なぜあなたはこれをしたいのですか? – JeffryHouser

+0

@RIAstar - AS3 –

答えて

0

を画面上のすべてのオブジェクトを通して繰り返して、のタイプのSparkSkinであるかどうか確認できます。このような何か:

private function findSkins():void 
{ 
    recurseComponent(FlexGlobals.topLevelApplication); 
} 

private function recurseComponent(parent:UIComponent):void 
{ 
    var child:UIComponent; 
    for(var i:uint = 0, len:uint = parent.numElements; i<len; i++) 
    { 
     child = parent.getElementAt(i) as UIComponent; 
     if(child && child is SparkSkin) 
     { 
      trace("Skin Found!"); // trace whatever you need here 
     } 
     recurseComponent(child); 
    } 
} 

しかし、それは数千に行くことができ、画面上のすべてのオブジェクト、を反復処理する必要があるので、このソリューションは非常に高価であることを警告します。しかし、私は本当にこれの目的が何かを見ていないし、デバッグ/テストの目的以外には絶対に推奨しないだろう。

編集:これは、表示リストのスキンでのみ機能します。 CSSで言及されているスキンは認識されません。すべてのCSSを調べて、skinClassのプロパティがあるかどうかを調べる方法がないと確信しています。しかし、それは、actionscriptまたはインラインmxmlで設定されたデフォルトのスキンやスキンをキャッチしません。

+0

右。あなたが掲示したコードは、表示リストを通過するだけです。投稿したコードはすべてのスキンを取得します。それはちょうどkludgyであり、私が他の多くの仕事なしで探しているものを私に与えることはありません。 –

+0

スタイルマネージャーはあなたにすべてのスキンを与えるわけではありません。既にロードされているcss *または* inlineに指定されたもののみ。インラインでロードされていないものはおそらく表示されません。繰り返しますが、これの目的を理解しておらず、最初にこれを行うべきではありません。 –

+0

ありがとうJAXとみんな。私は今これを保留にしています。 –

関連する問題