從.NET 3.0發布至今,.NET Framework相繼發布了.NET 3.5和.NET3.5 SP1。其間做了兩個基於WPF的項目。發現現在的WPF的BUG真的是不算少。給程序的開發帶來了不少的困擾——為了避開BUG,而不得不多寫很多代碼。
這個“WPF BUG清單”系列,將列出筆者在項目中遇到過的WPF的各種問題,也許不一定是BUG,但是會造成開發上的不便。更感覺WPF的第一次發布實在有趕鴨子上架的嫌疑。很多東西都還沒有做就發布了。(跟Silverlight 1.0一樣)
先舉個最簡單的BUG。WPF中ListBox選中項BUG。
1<Window x:Class="ListBoxSelectionBug.DemoWindow"
2 xmlns=""
3 xmlns:x=""
4 xmlns:sys="clr-namespace:System;assembly=mscorlib"
5 xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
6 Title="ListBox Selection Bug Demo" Height="300" Width="300">
7 <DockPanel Margin="12">
8 <Label Content="隨便點點,他們可應該都是單選的哦。"
9 DockPanel.Dock="Top"/>
10 <GroupBox Header="WPF ListBox"
11 DockPanel.Dock="Top"
12 Padding="9" Margin="0,0,0,12">
13 <ListBox SelectionMode="Single">
14 <sys:String>A string value</sys:String>
15 <sys:String>A string value</sys:String>
16 <sys:String>A string value</sys:String>
17 </ListBox>
18 </GroupBox>
19 <GroupBox Header="Forms ListBox" Padding="9">
20 <WindowsFormsHost>
21 <forms:ListBox>
22 <forms:ListBox.Items>
23 <sys:String>A string</sys:String>
24 <sys:String>A string</sys:String>
25 <sys:String>A string</sys:String>
26 </forms:ListBox.Items>
27 </forms:ListBox>
28 </WindowsFormsHost>
29 </GroupBox>
30 </DockPanel>
31</Window>
32
上面的源代碼中同時列出了WPF的ListBox和WinForm的ListBox作為對比。注意在WPF的ListBox上可是特意標示出它是一個單選列表框了哦。但是結果卻是這個樣子。
圖1. WPF ListBox Selection Bug
都是在ListBox裡直接放幾個String類型的值。結果WPF ListBox把幾個值一樣的string當成了同一個string,還變成了一個MultiSelection的ListBox。
從.NET 3.0等到了.NET 3.5 SP1,這個BUG依然怡然自得地躺在WPF裡。不知道是不是微軟不認為這是一個BUG?
PS:請不要建議在ListBox裡放ListBoxItem來逃避這個問題。
在後面的幾篇裡,將會繼續為大家揭露一些WPF的BUG或是不便(基本上各個控件都有份哦。),更歡迎大家來補充自己發現的BUG,畢竟一個人的見識有限。希望能給大家一些提示。