WPF里枚舉變量Visibility 有三個值:Visible, Collapsed和Hidden。其中Collapsed是WPF新引進的,其作用是不僅隱去Control,同時也會移除Control所占據的空間。這個屬性在你需要隱藏某個控件的同時又讓界面看起來統一齊整時非常有效。
一般來說,使用Hidden和Collapsed隱藏控件都是可行的。但是在實際的開發過程中,我發現兩者還是有不少區別的,尤其在某些特定的環境里。如果使用過程中不注意,可能會造成不可預見的后果。
我開發過一個程序,主界面的Xaml布局大概如下:
在后台代碼中,A和B會相互切換,隱去A顯示B或顯示B隱去A。如果隱去的時候設置的枚舉值是Collapsed,我發現在切換的過程中,A或B的界面顯示會有問題,具體表現為其長度超出了原先設想的限制范圍。跟蹤的時候發現Windows的重載函數MeasureOverride和ArrangeOverride被調用,而且其參數就已經有問題了。分析認為,如果一個控件被設置成Collapsed,重新顯示的時候,Render Engine就會重新計算A或B里控件的位置和大小,造成不可預知的結果。如果設成Hidden,因為控件所占的位置沒有被移除,重新顯示的時候就不需要計算這些數值,也就可以避免以上不良后果。
另外一個問題涉及到508(高亮對比,針對色盲人士)。如果控件設置成了Collapsed,多次設置高對比度后,該控件沒法正常顯示,其位置為黑色,重啟程序方能解決。設置成hidden就不會有這個問題。
本文來自
http://blog.csdn.net/qian_xu/article/details/6191900