最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF集合控件實(shí)現(xiàn)分隔符(ItemsControl Separator)

 更新時(shí)間:2017年04月11日 08:35:55   作者:秦晉  
這篇文章主要為大家詳細(xì)介紹了WPF集合控件實(shí)現(xiàn)分隔符ItemsControl Separator,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在WPF的集合控件中常常需要在每一個(gè)集合項(xiàng)之間插入一個(gè)分隔符樣式,但是WPF的ItemsControl沒(méi)有相關(guān)功能的直接實(shí)現(xiàn),所以只能考慮曲線救國(guó),經(jīng)過(guò)研究,大概想到了以下兩種實(shí)現(xiàn)方式。

先寫(xiě)出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就是分隔符,此時(shí)每一項(xiàng)的頭部都可以看見(jiàn)分隔符,現(xiàn)在我們的目標(biāo)是要隱藏掉第一項(xiàng)的分隔符,這就達(dá)到了項(xiàng)與項(xiàng)之間才有分隔符的目的。

第一種實(shí)現(xiàn)方式最簡(jiǎn)單,使用集合項(xiàng)前向綁定PreviousData,這是四種綁定方式中的一種,估計(jì)也是平時(shí)用得最少的一種,不過(guò)此時(shí)就派上用場(chǎng)了,代碼如下:

<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í)就隱藏分隔符,簡(jiǎn)單的一行代碼搞定。不過(guò)這種實(shí)現(xiàn)方式有個(gè)缺點(diǎn)就是如果使用的是Insert方式向綁定的數(shù)據(jù)源的最前面添加數(shù)據(jù)則就會(huì)出現(xiàn)不止一個(gè)沒(méi)有分隔符的項(xiàng),如果是往隊(duì)尾或者隊(duì)中添加則不會(huì)出現(xiàn)這個(gè)問(wèn)題。

第二種實(shí)現(xiàn)方式是借助ItemsControlAlternationCountAlternationIndex屬性來(lái)為集合項(xiàng)標(biāo)記索引號(hào),再隱藏索引號(hào)為0的項(xiàng)的分隔符,代碼如下:

復(fù)制代碼 代碼如下:
<ItemsControl ItemsSource="{Binding Source}" BorderThickness="1" BorderBrush="Blue"
              VerticalAlignment="Stretch" AlternationCount="{Binding Source.Count}">

首先在ItemsControl上綁定AlternationCount到數(shù)據(jù)源的Count屬性上,然后此時(shí)ItemsControl的AlternationIndex屬性就變成的該集合數(shù)據(jù)源的索引號(hào)了,在觸發(fā)器中寫(xiě)上邏輯即可:

<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)索引號(hào)為0時(shí)就隱藏Border,這種方式代碼量也不大,優(yōu)點(diǎn)是能絕對(duì)實(shí)現(xiàn)這個(gè)功能,無(wú)論向隊(duì)首插入還是隊(duì)尾插入,但是AlternationCountAlternationIndex屬性本來(lái)的含義是用來(lái)實(shí)現(xiàn)比如隔行變色等功能,此時(shí)這種功能被占用,所以如果你的集合要同時(shí)實(shí)現(xiàn)分隔符和隔行樣式的功能可能需要額外加轉(zhuǎn)換器,不過(guò)轉(zhuǎn)換器內(nèi)容也很簡(jiǎn)單,求個(gè)余數(shù)就能還原之前的功能了。

這個(gè)小功能的代碼參見(jiàn):https://github.com/fengrui358/WPFLabs/tree/master/WpfItemsControlSplitter

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

利川市| 皋兰县| 乌审旗| 涟水县| 扎赉特旗| 荥经县| 宜都市| 图木舒克市| 霍山县| 穆棱市| 会泽县| 汾阳市| 凤城市| 通山县| 崇信县| 屏边| 来安县| 马龙县| 乌拉特中旗| 盐城市| 九江县| 项城市| 庐江县| 衡山县| 五大连池市| 元谋县| 弋阳县| 长岭县| 包头市| 沅江市| 方正县| 柳林县| 布拖县| 烟台市| 旺苍县| 五华县| 和林格尔县| 河东区| 宜黄县| 洪江市| 霍城县|