国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

WPF集合控件實現分隔符(ItemsControl Separator)

2024-07-10 12:49:10
字體:
來源:轉載
供稿:網友

在WPF的集合控件中常常需要在每一個集合項之間插入一個分隔符樣式,但是WPF的ItemsControl沒有相關功能的直接實現,所以只能考慮曲線救國,經過研究,大概想到了以下兩種實現方式。

先寫出ItemsControl的數據模板,如下:

<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就是分隔符,此時每一項的頭部都可以看見分隔符,現在我們的目標是要隱藏掉第一項的分隔符,這就達到了項與項之間才有分隔符的目的。

第一種實現方式最簡單,使用集合項前向綁定PreviousData,這是四種綁定方式中的一種,估計也是平時用得最少的一種,不過此時就派上用場了,代碼如下:

<DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}"     Value="{x:Null}">  <Setter TargetName="Bd" Property="Visibility" Value="Collapsed" /> </DataTrigger></DataTemplate.Triggers>

當某一項的前項為空時就隱藏分隔符,簡單的一行代碼搞定。不過這種實現方式有個缺點就是如果使用的是Insert方式向綁定的數據源的最前面添加數據則就會出現不止一個沒有分隔符的項,如果是往隊尾或者隊中添加則不會出現這個問題。

第二種實現方式是借助ItemsControl的AlternationCount和AlternationIndex屬性來為集合項標記索引號,再隱藏索引號為0的項的分隔符,代碼如下:

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

首先在ItemsControl上綁定AlternationCount到數據源的Count屬性上,然后此時ItemsControl的AlternationIndex屬性就變成的該集合數據源的索引號了,在觸發器中寫上邏輯即可:

<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>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀远县| 蕲春县| 涞源县| 乐亭县| 福海县| 沅陵县| 玉山县| 榕江县| 玉树县| 昌平区| 台州市| 安化县| 新兴县| 蕉岭县| 衡东县| 海盐县| 大同县| 子长县| 普兰县| 罗江县| 许昌市| 灵丘县| 青田县| 巨野县| 广南县| 保亭| 凌海市| 横峰县| 建德市| 平南县| 搜索| 梁平县| 共和县| 郑州市| 中阳县| 八宿县| 长治县| 长治县| 柏乡县| 普陀区| 景洪市|