2011-12-17 45 views
0

我想在ActionScript中設置(手動)按鈕(我皮膚)的skinState(例如'disabled')。在AS3中設置按鈕的skinState

例如: 我有hostComponent一個按鈕皮膚:components.backend.btnMenuBakComp 按鈕皮膚有默認的按鈕狀態(上,過去,下來,...),但我想設置這樣一個ActionScript中的skinStates。

例如:

subMenu.btnDashboard.currentState = "disabled"; 

這不會工作,因爲狀態「無效」未在成分已知的(它僅在btnDashboard的skinState已知的)。

我該如何解決這個問題? 是否有另一種解決方案,然後加載一個新的skinClass?

感謝

+0

你說的是在組件框中正確的不是按鈕符號類型的按鈕組件 – annonymously 2011-12-17 22:18:00

回答

2

快速和骯髒的

您可以訪問任何組件的皮膚,只是直接設置它的狀態:

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

那然而,這不是一個非常乾淨的方式做它。你直接告訴一個Skin類需要做什麼並完全繞過主機組件。因此主機組件不知道對其皮膚所做的更改。

正確的方法

解決這個清晰的方法是將主機組件上提供一個屬性,然後告訴皮膚通過重寫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 2012-03-23 09:22:58