2010-12-16 50 views
0

我在Silverlight中有一個按鈕。我需要在運行時改變它的風格。這個Button的風格在應用程序的生命週期中需要多次更改。這在Silverlight中可能嗎?如果不是,什麼是一個好的解決方法?在Silverlight中運行時更改按鈕樣式

謝謝!

回答

1

考慮使用VisualStateManager來根據需要更改按鈕的狀態。

您可以爲您希望顯示的每種不同風格創建自己的狀態。

1

是的,這是可能的,但我想通過改變風格本身來努力嘗試做什麼,因爲可能有一種更簡單的方法。您可能已經遇到了這樣一個事實,即您不能簡單地使用MyButton.Style = (Style)FindName("NewButtonStyle")之類的按鈕爲按鈕分配新樣式。所以你確實需要某種選擇。

VisualStateManager是處理您通常想要對控件進行的大多數更改的第一種也是最簡單的方法。你可以非常容易地設置在正常種類的可見狀態(懸停,焦點,mousedown,mouseup)上發生的變化,並且它會從任何你處於任何其他狀態的狀態正確地動畫這些狀態變化。

如果您要查找的更改類型更廣泛,則將控件類型更改爲ContentControl,然後從此處捕獲mousedown/mouseup事件可能是更好的解決方法。這顯然是一個更大的交易(並且您失去了一個按鈕的簡單性),但只需更換Content屬性即可輕鬆獲得想要的任何更改。

這兩者之間的某處(以及我會提到的,因爲這是可能的,不是因爲我推薦它)將實際操縱Style定義本身。按鈕將會選擇更改並自行調整。我將在此重複自己:我不建議這樣做,我也不能設想一個場景,我寧願使用VSM來完成此操作,或完全使用Button以外的其他方法。但是有可能進入Application.Current.Resources["Style"] as Style,並且隨心所欲。那麼更大的問題是,爲什麼以及您所做的是否可以通過其他方式來完成,這對於以後誰維護您的代碼會更有意義。就我個人而言,我期望Styles是相當靜態的,我認爲這也是普遍的共識。

0

當然你可以....

,如果你有本地存儲的風格,你可以像訪問:

rec1.Style = (Style)this.Resources["style1"];