新聞中心
Silverlight自身還有沒有問題? 誰也沒法回答.

工作中遇到了一個關(guān)于ListBox的問題. 簡單描述一下: 使用ListBox來顯示某對象集合, 在排版的時候, 發(fā)現(xiàn)無論怎么調(diào)整ListBox的屬性, 都無法讓ListItem充滿整個空間; 令人郁悶的是,ListItem中排放的TextBlock/TextBox總會根據(jù)自身文本的大小, 自動設(shè)定自己的長度; ListItem中的所有控件都自動向左對齊,造成了一副"甘特圖"式的圖像, 舉例(姓名, 年齡, 郵件地址)如下:
在設(shè)置了淺藍(lán)色的Border之后, 這個現(xiàn)象實在是太明顯了!
按照MSDN的說法, 我們只需要在ListBox的屬性中加入如下設(shè)定語句, 就會強制長度自動Fill了:
HorizontalContentAlignment="Stretch"
但是加入之后沒有效果! 這顯然是Silverlight 2的又一個bug.
我們可以在MSDN上看到ItemContainer的默認(rèn)Style(你也可以從這里看: http://msdn.microsoft.com/en-us/library/cc278062%28vs.95%29.aspx):
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:Visible
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46: 47: x:Name="contentPresenter"48: Content="{TemplateBinding Content}"49: ContentTemplate="{TemplateBinding ContentTemplate}"50: HorizontalAlignment="Left"51: Margin="{TemplateBinding Padding}"/>52:53:54:55:56:57:可以看出來, 值設(shè)置為Left的屬性僅有2個:
第3行 HorizontalContentAlignment
第50行 HorizontalAlignment
問題出在了第50行的這個Left,它默認(rèn)將一個List Item中的所有內(nèi)容都按照想做對齊的方式排列,由于這個style已經(jīng)寫在了Silverlight Runtime內(nèi),所以我們只能重寫這個Style去掉這一行并為ListBox指定新的Style。
解決方法:
為ListBox添加屬性 HorizontalContentAlignment="Stretch", 強制Fill
在App.xaml中添加命名空間: xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
在App.xaml中添加去掉了HorizontalAlignment="Left"的Style, 并給它的key命名為ListBoxItemContainerStyle ---x:Key="ListBoxItemContainerStyle"
為ListBox添加屬性 ItemContainerStyle="{StaticResource ListBoxItemContainerStyle}, 指定用戶自定義Style
Done!現(xiàn)在你可以看到這個運行結(jié)果了:
中間的年齡部分是可以隨著窗體大小變化自動變化寬度的.
【編輯推薦】
- 在Silverlight中進(jìn)行基本的數(shù)據(jù)驗證
- 詳解Silverlight中的Downloader對象
- Silverlight 2 Twitter 例程
分享題目:Silverlight 2解決ListBox中一個Layout Bug
網(wǎng)站URL:http://fisionsoft.com.cn/article/cdeosic.html


咨詢
建站咨詢
