2011-12-17 3 views
0

ActionScriptでスキン状態(たとえば、スキンしたボタン)のskinState(「無効」など)を設定したいとします。例えばAS3のボタンのskinStateを設定する

:components.backend.btnMenuBakComp ボタンのスキンは(アップ、オーバー、ダウン、...)デフォルトのボタンの状態を持っていますが、私はこれの1を設定したい: 私はhostComponentとボタンのスキンを持っていますActionScriptのskinStates例えば

subMenu.btnDashboard.currentState = "disabled"; 

状態「無効」が(それだけbtnDashboardのskinStateで知られている)成分で知られていないので、これは動作しません。

どうすればこの問題を解決できますか? 別のソリューションがあり、新しいskinClassをロードしますか?

おかげ

+0

あなたはコンポーネントボックスの右にあるButtonコンポーネントはないボタンのシンボルタイプの話をしている – annonymously

答えて

2

クイックや汚れ

あなたは、任意のコンポーネントのスキンにアクセスするだけで直接その状態を設定することができます。

subMenu.btnDashboard.skin.currentState = "disabled"; 

しかし行うには非常にきれいな方法ではないことそれ。スキンクラスに何をすべきかを直接伝え、ホストコンポーネントを完全にバイパスします。したがって、ホストコンポーネントは、そのスキンに加えられた変更を知らない。

適切な方法

これにアプローチするクリーンな方法は、ホストコンポーネントのプロパティを公開し、その後getCurrentSkinState()メソッドをオーバーライドすることで可能な変化に自分自身を調整するために皮膚を伝えることです。

たとえば、 'enabled'プロパティを作成し、 'enabled'が設定されている場合は、invalidateSkinState()を呼び出してスキンに状態を更新するように指示できます。

public function set enabled(value:Boolean):void { 
    _enabled = value; 
    invalidateSkinState(); 
} 

invalidateSkinState()を呼び出すと、次の描画サイクルで肌のコールgetCurrentSkinState()を行います。

override protected function getCurrentSkinState():String { 
    return _enabled ? "normal" : "disabled"; 
} 

ので、あなたはボタン(またはそのサブクラス)をスキニングしていることに注意してください、私がここに書いてきたことすべてが、すでにそのコンポーネントに焼きされます。このメソッドは、このようになります。ただtrueに 『有効』プロパティを設定する」

subMenu.btnDashboard.enabled = true; 
+0

:ようにあなたの質問への答えは同じくらい簡単かもしれません。??ありがとう、偉大な(私は答えを受け入れた)! – benske

関連する問題