本篇文章為大家展示了WPF集合控件如何實(shí)現(xiàn)分隔符,代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)是一家成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需網(wǎng)站建設(shè),網(wǎng)站開發(fā)公司,從2013年開始是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺程序制作以及后期項(xiàng)目運(yùn)營并提出專業(yè)建議和思路。這篇文章主要為大家詳細(xì)介紹了WPF集合控件實(shí)現(xiàn)分隔符ItemsControl Separator,具有一定的參考價值,感興趣的小伙伴們可以參考一下
在WPF的集合控件中常常需要在每一個集合項(xiàng)之間插入一個分隔符樣式,但是WPF的ItemsControl沒有相關(guān)功能的直接實(shí)現(xiàn),所以只能考慮曲線救國,經(jīng)過研究,大概想到了以下兩種實(shí)現(xiàn)方式。
先寫出ItemsControl的數(shù)據(jù)模板,如下:
<ItemsControl ItemsSource="{Binding Source}" BorderThickness="1" BorderBrush="Blue" VerticalAlignment="Stretch"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Border Name="Bd" Grid.Row="0" Height="1" Background="Red" /> <TextBlock Grid.Row="1" Text="{Binding}" /> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
其中名為Bd的Border就是分隔符,此時每一項(xiàng)的頭部都可以看見分隔符,現(xiàn)在我們的目標(biāo)是要隱藏掉第一項(xiàng)的分隔符,這就達(dá)到了項(xiàng)與項(xiàng)之間才有分隔符的目的。
第一種實(shí)現(xiàn)方式最簡單,使用集合項(xiàng)前向綁定PreviousData,這是四種綁定方式中的一種,估計(jì)也是平時用得最少的一種,不過此時就派上用場了,代碼如下:
<DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}"> <Setter TargetName="Bd" Property="Visibility" Value="Collapsed" /> </DataTrigger> </DataTemplate.Triggers>
當(dāng)某一項(xiàng)的前項(xiàng)為空時就隱藏分隔符,簡單的一行代碼搞定。不過這種實(shí)現(xiàn)方式有個缺點(diǎn)就是如果使用的是Insert方式向綁定的數(shù)據(jù)源的最前面添加數(shù)據(jù)則就會出現(xiàn)不止一個沒有分隔符的項(xiàng),如果是往隊(duì)尾或者隊(duì)中添加則不會出現(xiàn)這個問題。
第二種實(shí)現(xiàn)方式是借助ItemsControl的AlternationCount和AlternationIndex屬性來為集合項(xiàng)標(biāo)記索引號,再隱藏索引號為0的項(xiàng)的分隔符,代碼如下:
復(fù)制代碼 代碼如下:
<ItemsControl ItemsSource="{Binding Source}" BorderThickness="1" BorderBrush="Blue"
VerticalAlignment="Stretch" AlternationCount="{Binding Source.Count}">
首先在ItemsControl上綁定AlternationCount到數(shù)據(jù)源的Count屬性上,然后此時ItemsControl的AlternationIndex屬性就變成的該集合數(shù)據(jù)源的索引號了,在觸發(fā)器中寫上邏輯即可:
<Border Name="Bd" Grid.Row="0" Height="1" Background="Red"> <Border.Style> <Style TargetType="{x:Type Border}"> <Style.Triggers> <DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}}" Value="0"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border>
觸發(fā)器判定當(dāng)索引號為0時就隱藏Border,這種方式代碼量也不大,優(yōu)點(diǎn)是能絕對實(shí)現(xiàn)這個功能,無論向隊(duì)首插入還是隊(duì)尾插入,但是AlternationCount和AlternationIndex屬性本來的含義是用來實(shí)現(xiàn)比如隔行變色等功能,此時這種功能被占用,所以如果你的集合要同時實(shí)現(xiàn)分隔符和隔行樣式的功能可能需要額外加轉(zhuǎn)換器,不過轉(zhuǎn)換器內(nèi)容也很簡單,求個余數(shù)就能還原之前的功能了。
上述內(nèi)容就是WPF集合控件如何實(shí)現(xiàn)分隔符,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前文章:WPF集合控件如何實(shí)現(xiàn)分隔符-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://jinyejixie.com/article42/icjec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、小程序開發(fā)、網(wǎng)站導(dǎo)航、Google、定制網(wǎng)站、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容