您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)WPF如何實現(xiàn)分隔符的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在WPF的集合控件中常常需要在每一個集合項之間插入一個分隔符樣式,但是WPF的ItemsControl沒有相關(guān)功能的直接實現(xiàn),所以只能考慮曲線救國,經(jīng)過研究,大概想到了以下兩種實現(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àn)在我們的目標(biāo)是要隱藏掉第一項的分隔符,這就達到了項與項之間才有分隔符的目的。
第一種實現(xiàn)方式最簡單,使用集合項前向綁定PreviousData,這是四種綁定方式中的一種,估計也是平時用得最少的一種,不過此時就派上用場了,代碼如下:
<DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}"> <Setter TargetName="Bd" Property="Visibility" Value="Collapsed" /> </DataTrigger> </DataTemplate.Triggers>
當(dāng)某一項的前項為空時就隱藏分隔符,簡單的一行代碼搞定。不過這種實現(xiàn)方式有個缺點就是如果使用的是Insert方式向綁定的數(shù)據(jù)源的最前面添加數(shù)據(jù)則就會出現(xiàn)不止一個沒有分隔符的項,如果是往隊尾或者隊中添加則不會出現(xiàn)這個問題。
第二種實現(xiàn)方式是借助ItemsControl的AlternationCount和AlternationIndex屬性來為集合項標(biāo)記索引號,再隱藏索引號為0的項的分隔符,代碼如下:
復(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)點是能絕對實現(xiàn)這個功能,無論向隊首插入還是隊尾插入,但是AlternationCount和AlternationIndex屬性本來的含義是用來實現(xiàn)比如隔行變色等功能,此時這種功能被占用,所以如果你的集合要同時實現(xiàn)分隔符和隔行樣式的功能可能需要額外加轉(zhuǎn)換器,不過轉(zhuǎn)換器內(nèi)容也很簡單,求個余數(shù)就能還原之前的功能了。
感謝各位的閱讀!關(guān)于“WPF如何實現(xiàn)分隔符”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。