Windows Phone 7 Button修改前景色和背景色的問題和解決辦法

l_serein發表於2012-12-16

private void button1_Click(object sender, RoutedEventArgs e)
{
    button1.Background = new SolidColorBrush(Colors.Blue);
    button1.Foreground = new SolidColorBrush(Colors.Red);
}
介面截個圖,直觀些:






編譯執行後,按鈕的顏色沒有變化,感覺非常奇怪。於是檢視MSDN的幫助文件,把控制元件更新相關的方法也胡亂試了一通,居然都沒有效果。鬱悶了,覺得奇怪,把程式碼直接複製到建構函式的下面了:


?
1
2
3
4
5
6
public MainPage()
{
    InitializeComponent();
    button1.Background = new SolidColorBrush(Colors.Blue);
    button1.Foreground = new SolidColorBrush(Colors.Red);
}
補充一句,預設情況下Button是黑色背景,白色前景。


編譯執行後,按鈕顏色變了!這說明在程式碼中操作Background和Foreground這兩個屬性也沒問題啊。


想不通了,我再加個按鈕試試吧,於是又增加個button2,在button2的點選操作中做同樣的操作,也是改變button1的前景色和背景色。


問題出現了:


1.如果先點選Button1,還是沒有任何變化,再點選Button2,Button1也沒有變化。


2.如果先點選Button2,Button1的前景色和背景色就變了。


3.我又試了Button2點選響應函式中改變自己顏色,沒有效果。


截圖如下:






 


我有點暈了,為什麼呢?不過似乎找到了點規律,就是按鈕在其自身的點選響應函式中,修改不了自身的前景色和背景色。


沒想明白,再增加一個按鈕試試吧。這回策略變一下,在每個按鈕的響應函式中,修改另外兩個按鈕的顏色。


又找到了規律:


1.第一次點選某一個按鈕,例如Button1,修改另外兩個按鈕的前景色和背景色,都正常能修改。如圖:






2.第二次點選另一個按鈕,例如Button2,第一次點選過的按鈕顏色不會變。如圖:






3.只要點選過的按鈕,顏色就無法改變了。


我想不明白了,為什麼只要點選過的按鈕,顏色就修改不了了呢?


我又用Silverlight程式試了一下,在SL中沒這個問題,只有在WP7中這個問題存在。


如果真的有這樣的需求,給大家幾個建議:


1.用Blend編輯好按鈕各個狀態的顏色,例如按下和正常狀態的顏色,不在程式碼裡動態改變了。


2.把按鈕設定為透明,後面放個Border,這樣做能改背景色,但前景色就無能為力了。


3.用Image或其它控制元件代替Button,這樣可能會麻煩一些。


如果大家有好的解決辦法,請在下面留言,非常感謝。

相關文章