WPF中设置ListView的Items颜色交替显示
2010-05-14 16:12
543 查看
2008/02/28 17:32
i当ListView绑定数据源后,这个效果让我无从下手, 这个问题一直困扰着我,后来我在CSDN上发贴求助,问题终于得以解决,这是一位大大给的回复: 以下各节提供了三种方法,用于创建各行的 Background 颜色具有交替效果的 ListView。该示例还论述用于在添加或移除行时更新视图的方法。 方法 1:定义使用 IValueConverter 来使背景色产生交替效果的样式 下面的示例显示如何为将 Background 属性的值绑定到 IValueConverter 的 ListViewItem 控件定义 Style。 XAML 复制代码 <Style x:Key="myItemStyle" TargetType="{x:Type ListViewItem}"> <Setter Property="Background"> <Setter.Value> <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource myConverter}"/> </Setter.Value> </Setter> </Style> 下面的示例为 IValueConverter 定义 ResourceKey。 XAML 复制代码 <namespc:BackgroundConverter x:Key="myConverter"/> 下面的示例显示依据行索引设置 Background 属性的 IValueConverter 的定义。 C# 复制代码 public sealed class BackgroundConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ListViewItem item = (ListViewItem)value; ListView listView = ItemsControl.ItemsControlFromItemContainer(item) as ListView; // Get the index of a ListViewItem int index = listView.ItemContainerGenerator.IndexFromContainer(item); if (index % 2 == 0) { return Brushes.LightBlue; } else { return Brushes.Beige; } } 下面的示例演示如何定义使用 Style 作为其 ItemContainerStyle 以便提供所需布局的 ListView。 XAML 复制代码 <ListView Name="theListView" ItemsSource="{Binding Source={StaticResource EmployeeData}, XPath=Employee}" ItemContainerStyle="{StaticResource myItemStyle}" > <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding XPath=FirstName}" Header="First Name" Width="120"/> <GridViewColumn DisplayMemberBinding="{Binding XPath=LastName}" Header="Last Name" Width="120"/> <GridViewColumn DisplayMemberBinding="{Binding XPath=FavoriteCity}" Header="Favorite City" Width="120"/> </GridView> </ListView.View> </ListView> 方法 2:从 ListView 中派生一个新类以使背景色产生交替效果 下面的示例演示如何定义从 ListView 中派生的类。此类将重写 PrepareContainerForItemOverride 方法,以便创建具有交替 Background 颜色的行。 C# 复制代码 public class SubListView : ListView { protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); if (View is GridView) { int index = ItemContainerGenerator.IndexFromContainer(element); ListViewItem lvi = element as ListViewItem; if (index % 2 == 0) { lvi.Background = Brushes.LightBlue; } else { lvi.Background = Brushes.Beige; } } } } 下面的示例演示如何创建此类的实例。namespc 前缀映射到 公共语言运行库 (CLR) 命名空间和其中定义了 StyleSelector 的对应程序集。 XAML 复制代码 <namespc:SubListView ItemsSource="{Binding Source={StaticResource EmployeeData}, XPath=Employee}"> <namespc:SubListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding XPath=FirstName}" Header="First Name" Width="120"/> <GridViewColumn DisplayMemberBinding="{Binding XPath=LastName}" Header="Last Name" Width="120"/> <GridViewColumn DisplayMemberBinding="{Binding XPath=FavoriteCity}" Header="Favorite City" Width="120"/> </GridView> </namespc:SubListView.View> </namespc:SubListView> 方法 3:使用 StyleSelector 使背景色产生交替效果 下面的示例演示如何定义一个为行定义 Style 的 StyleSelector。此示例依据行索引定义 Background 颜色。 C# 复制代码 public class ListViewItemStyleSelector : StyleSelector { public override Style SelectStyle(object item, DependencyObject container) { Style st = new Style(); st.TargetType = typeof(ListViewItem); Setter backGroundSetter = new Setter(); backGroundSetter.Property = ListViewItem.BackgroundProperty; ListView listView = ItemsControl.ItemsControlFromItemContainer(container) as ListView; int index = listView.ItemContainerGenerator.IndexFromContainer(container); if (index % 2 == 0) { backGroundSetter.Value = Brushes.LightBlue; } else { backGroundSetter.Value = Brushes.Beige; } st.Setters.Add(backGroundSetter); return st; } } 下面的示例演示如何为 StyleSelector 定义 ResourceKey。namespc 前缀映射到 CLR 命名空间和其中定义了 StyleSelector 的对应程序集。有关更多信息,请参见 XAML 命名空间和命名空间映射。 XAML 复制代码 <namespc:ListViewItemStyleSelector x:Key="myStyleSelector"/> 下面的示例演示如何将 ListView 的 ItemContainerStyleSelector 属性设置为此 StyleSelector 资源。 XAML 复制代码 <ListView ItemsSource="{Binding Source={StaticResource EmployeeData}, XPath=Employee}" ItemContainerStyleSelector="{DynamicResource myStyleSelector}" > <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding XPath=FirstName}" Header="First Name" Width="120"/> <GridViewColumn DisplayMemberBinding="{Binding XPath=LastName}" Header="Last Name" Width="120"/> <GridViewColumn DisplayMemberBinding="{Binding XPath=FavoriteCity}" Header="Favorite City" Width="120"/> </GridView> </ListView.View> </ListView> 在 ListViewItem 集合中进行更改后更新 ListView 如果从 ListView 控件中添加或移除 ListViewItem,您必须更新 ListViewItem 控件以便重新创建交替的 Background 颜色。下面的示例演示如何更新 ListViewItem 控件。 C# 复制代码 ICollectionView dataView = CollectionViewSource.GetDefaultView(theListView.ItemsSource); dataView.Refresh(); |
相关文章推荐
- listview颜色交替显示代码
- listview颜色交替显示代码
- 一:从实例入手之设置设置颜色交替显示的GridView(方法一)
- wpf listView实现Grid,并且奇偶行显示不同颜色
- 设置UIButton的文字显示位置、字体的大小、字体的颜色
- 列宽度【WPF】DataGrid 列按百分比设置宽度,及列值显示的格式化
- Drag and Drop Items in a WPF ListView
- JXCELL实例学习与研究(五) 之 斜体的设置以及字符串中颜色的显示
- 设置listview分割线的颜色和宽度
- UIButton 文字显示位置设置 字体的大小设置 字体的颜色设置 注意事项
- 创建一个显示所有预定义WPF颜色的ListBox
- jQuery实现行背景颜色的交替显示
- HotApp小程序统计开发总结之设置了navigationBarBackgroundColor颜色,android 可以显示,ios不能显示
- excel设置下拉菜单,并且不同值会显示不同颜色
- Android 中的ListView选中项的背景颜色怎么设置?
- 动态设置交替单元格颜色
- UIButton在设置不能交互的情况下如何让背景图片显示正常颜色。
- 不同颜色背景交替显示
- listview中的字体设置为不同颜色
- 一行代码设置TForm颜色的前世今生(属性赋值引起函数调用,然后发消息实现改变显示效果),TForm的初始颜色在dfm中设置了clBtnFace色