一般我們在開發Windows Store App 或 Windows Phone App ,有時會去調整控制項的透明度就是Opacity 的屬性,再利用IF判斷是去判斷該控制項是否在某一個自訂的透明度,去做相對應的事情,可是當我們使用 Opacity = = .X的時候,不可思議的事情發生了。
本篇文章將引導您增加對Opacity 透明度屬性的認識。
一般我們在開發Windows Store App 或 Windows Phone App ,有時會去調整控制項的透明度就是Opacity 的屬性,再利用IF判斷是去判斷該控制項是否在某一個自訂的透明度,去做相對應的事情,可是當我們使用 Opacity = = .X的時候,不可思議的事情發生了。
本篇文章將引導您增加對Opacity 透明度屬性的認識。
我們在舞台上新建一個按鈕 Button ,並在程式碼中設定該按鈕的透明度為 0.2 也就是顯示20%的意思。
Xaml :
1: <Button x:Name="BTN" Content="透明度測試" Click="Button_Click" />
C#
1: BTN.Opacity = 0.2;
設定完之後,再新增一個判斷式,利用按鈕觸發,
判斷若透明度為0.2的話就改變成1
若透明度為 1的畫改為0.2
0.2→1
1→0.2
1: private void Button_Click(object sender, RoutedEventArgs e)
2: {
3: if (BTN.Opacity == 0.2)
4: {
5: BTN.Opacity = 1;
6: }
7: if (BTN.Opacity == 1) {
8: BTN.Opacity = 0.2;
9: }
10: }
運行後會發現 怎麼樣也無法將透明度改為1
於是SUKI百思不得其解,索性將透明度直接 Debug.WriteLine()出來
於是連按兩次按鈕的透明度結果如下
1: 1
2: 0.200000002980232
也就是非常神奇的事情發生了,透明度竟然不是0.2
而是0.200000002980232,
其中的原因是因為 那是因為浮點數不是精確小數的關係(感謝Phoenix補充說明),
而且在 http://msdn.microsoft.com/zh-tw/library/system.double.ASPX
也提到了 "由於某些數字不能表示為小數的二進位值,浮點數可能只是大約的數目。"
所以Opacity 透明度屬性並不是能如我們所願的非常精準
若日後有寫到修改控制項透明度屬性Opacity 時
要多加注意判斷式的修改,而不是Opacity ==0.2這麼簡單。
References : SUKI本人悟出來的
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處,並且附上本篇文章網址 ! 感謝。