gpt4 book ai didi

WPF集合控件实现分隔符(ItemsControl Separator)

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章WPF集合控件实现分隔符(ItemsControl Separator)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在WPF的集合控件中常常需要在每一个集合项之间插入一个分隔符样式,但是WPF的ItemsControl没有相关功能的直接实现,所以只能考虑曲线救国,经过研究,大概想到了以下两种实现方式.

先写出ItemsControl的数据模板,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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,这是四种绑定方式中的一种,估计也是平时用得最少的一种,不过此时就派上用场了,代码如下:

?
1
2
3
4
5
6
<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属性就变成的该集合数据源的索引号了,在触发器中写上逻辑即可:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>

触发器判定当索引号为0时就隐藏Border,这种方式代码量也不大,优点是能绝对实现这个功能,无论向队首插入还是队尾插入,但是AlternationCount和AlternationIndex属性本来的含义是用来实现比如隔行变色等功能,此时这种功能被占用,所以如果你的集合要同时实现分隔符和隔行样式的功能可能需要额外加转换器,不过转换器内容也很简单,求个余数就能还原之前的功能了.

这个小功能的代码参见:https://github.com/fengrui358/WPFLabs/tree/master/WpfItemsControlSplitter 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://www.cnblogs.com/qinjin/p/WPF-ItemsControl-Splitter.html 。

最后此篇关于WPF集合控件实现分隔符(ItemsControl Separator)的文章就讲到这里了,如果你想了解更多关于WPF集合控件实现分隔符(ItemsControl Separator)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com