生活随笔
收集整理的這篇文章主要介紹了
继续聊WPF——动态数据模板
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我為啥稱之為“動(dòng)態(tài)數(shù)據(jù)模板”?先看看下面的截圖,今天,我們就是要實(shí)現(xiàn)這種功能。
?
大概是這樣的,我們定義的DataTemplate是通過(guò)觸發(fā)器動(dòng)態(tài)應(yīng)用到 ComboBoxItem 上。
這個(gè)下拉列表控件綁定了一個(gè)Person集合,Person類的定義如下:
?
[csharp]?view plain
?copy public?class?Person??{??????public?string?Name?{?get;?set;?}??????public?int?Age?{?get;?set;?}??????public?string?Email?{?get;?set;?}??????public?override?string?ToString()??????{??????????return?Name;??????}??}??
?
這里重寫了ToString方法,因?yàn)镃omboBox生成的項(xiàng)是調(diào)用對(duì)象的ToString方法的,為了能不設(shè)置數(shù)據(jù)模板的前提下正確顯示列表項(xiàng),需要重寫ToString方法,默認(rèn)顯示姓名屬性。 然后,我們?yōu)镃omboBoxItem定義一個(gè)處于高亮狀態(tài)時(shí)使用的數(shù)據(jù)模板,也就是當(dāng)鼠標(biāo)移到項(xiàng)上時(shí)發(fā)生。
[html]?view plain
?copy <Window.Resources>??????????<DataTemplate?x:Key="hightlightTmp">??????????<Grid>??????????????<Grid.RowDefinitions>??????????????????<RowDefinition?Height="auto"/>??????????????????<RowDefinition?Height="auto"/>??????????????</Grid.RowDefinitions>??????????????<StackPanel?Margin="0,5,0,0"?Grid.Row="0"?Orientation="Horizontal">??????????????????<TextBlock?Margin="2,0"?FontWeight="Bold"?FontSize="14">??????????????????????????????<TextBlock.Text>??????????????????????????????????<Binding?Path="Name"???????????????????????????????????????????StringFormat="姓名:{0}"/>??????????????????????????????</TextBlock.Text>??????????????????</TextBlock>??????????????????<TextBlock?Margin="20,0">??????????????????????????????<TextBlock.Text>??????????????????????????????????<Binding?Path="Age"???????????????????????????????????????????StringFormat="年齡:{0}"/>??????????????????????????????</TextBlock.Text>??????????????????</TextBlock>??????????????</StackPanel>??????????????<TextBlock?Margin="0,2,0,5"?Grid.Row="1">??????????????????????????<TextBlock.Text>??????????????????????????????<Binding?Path="Email"???????????????????????????????????????StringFormat="電郵:{0}"/>??????????????????????????</TextBlock.Text>??????????????</TextBlock>??????????</Grid>??????</DataTemplate>?????????..............??????????</Window.Resources>??
?
為 ComboBoxItem 定義一個(gè)樣式。
[html]?view plain
?copy <Window.Resources>???????................??????????????????<Style?x:Key="cmbStyle"?TargetType="{x:Type?ComboBoxItem}">??????????<Style.Triggers>??????????????<Trigger?Property="IsHighlighted"?Value="True">??????????????????<Setter?Property="ContentTemplate"??????????????????????????Value="{StaticResource?hightlightTmp}"/>??????????????</Trigger>??????????</Style.Triggers>??????</Style>??</Window.Resources>??
?
在窗體中聲明一個(gè)ComboBox。
[html]?view plain
?copy <Grid>??????<ComboBox?x:Name="cmb"?Margin="10,10"????????????????Height="24"?Width="200"????????????????HorizontalAlignment="Left"????????????????VerticalAlignment="Top"????????????????ItemContainerStyle="{StaticResource?cmbStyle}"/>??</Grid>??
?
最后,切換到代碼視圖,完成設(shè)置數(shù)據(jù)源的C#代碼。
[csharp]?view plain
?copy public?Window1()??{??????InitializeComponent();??????this.cmb.ItemsSource?=?new?Person[]??????{??????????new?Person{Name="小李",Age=22,Email="suk211@163.com"},??????????new?Person{Name="小王",Age=20,Email="minat@126.com"},??????????new?Person{Name="黃漲",Age=21,Email="laned2@21cn.com"},??????????new?Person{Name="高產(chǎn)",Age=22,Email="ha@136.com"},??????????new?Person{Name="杜林",Age=21,Email="null@yaahoo.com"},??????????new?Person{Name="楊白姥",Age=50,Email="cYang@21cn.com"},??????????new?Person{Name="鳥(niǎo)人",Age=31,Email="bgl@ask.net.cn"},??????????new?Person{Name="宋小八",Age=28,Email="xde227@123h.com"}??????};??}??
?
完成,這時(shí)候運(yùn)行一下,你會(huì)看到上文中截圖中的效果了。
轉(zhuǎn)載于:https://www.cnblogs.com/sjqq/p/8379479.html
總結(jié)
以上是生活随笔為你收集整理的继续聊WPF——动态数据模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。