WPF中的ListBox預設使用的ItemsPanel是VirtualizingStackPanel,而不是一般的StackPanel,這樣在一般的使用上雖然不會發生什麼問題,但是當它一碰上Expander,問題就大條了。
首先,請先玩玩下面的範例,將所有的Expander展開,再將所有的Expander收合,看看兩邊有什麼不同之處:
我們可以很明顯的發現,左邊的容器在Expander收合之後,還是一樣佔了大部份的版面空間,而沒有隨著Expander收合而變小。
這個其實是因為WPF中的ListBox預設使用的ItemsPanel是VirtualizingStackPanel,而不是一般的StackPanel,這樣在一般的使用上雖然不會發生什麼問題,但是當它一碰上Expander,問題就大條了。
解法呢?很簡單,把ListBox的ItemsPanel改為一般的StackPanel就行啦!!
讓我們來看看上面範例的原始碼:
就這麼簡單!!
最後一樣附上專案原始檔,請自行服用: