wpf ListView 隔行 (各行) 显示 不同 背景 颜色
(2017-07-20 17:06:21)| 分类: .NET |
此示例演示您可用于使
以下各节提供了三种方法,用于创建各行的
方法 1:定义使用 IValueConverter 来使背景色产生交替效果的样式
下面的示例显示如何为将
下面的示例为
"myConverter"/>
下面的示例显示依据行索引设置
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; } }
下面的示例演示如何定义使用
"theListView" ItemsSource="{Binding Source={StaticResource EmployeeData}, XPath=Employee}" ItemContainerStyle="{StaticResource myItemStyle}" > "{Binding XPath=FirstName}" Header="First Name" Width="120"/> "{Binding XPath=LastName}" Header="Last Name" Width="120"/> "{Binding XPath=FavoriteCity}" Header="Favorite City" Width="120"/>
方法 2:从 ListView 中派生一个新类以使背景色产生交替效果
下面的示例演示如何定义从
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
<<span style="color: rgb(0, 0, 0);">namespc:SubListView
ItemsSource="{Binding Source={StaticResource EmployeeData},
XPath=Employee}">
"{Binding XPath=FirstName}"
Header="First Name" Width="120"/>
"{Binding XPath=LastName}"
Header="Last Name" Width="120"/>
"{Binding XPath=FavoriteCity}"
Header="Favorite City" Width="120"/>
方法 3:使用 StyleSelector 使背景色产生交替效果
下面的示例演示如何定义一个为行定义
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; } }
下面的示例演示如何为
"myStyleSelector"/>
下面的示例演示如何将
<<span style="color: rgb(0, 0, 0);">ListView
ItemsSource="{Binding Source={StaticResource EmployeeData},
XPath=Employee}"
ItemContainerStyleSelector="{DynamicResource myStyleSelector}" >
"{Binding XPath=FirstName}"
Header="First Name" Width="120"/>
"{Binding XPath=LastName}"
Header="Last Name" Width="120"/>
"{Binding XPath=FavoriteCity}"
Header="Favorite City" Width="120"/>
在 ListViewItem 集合中进行更改后更新 ListView
如果从
ICollectionView dataView =
CollectionViewSource.GetDefaultView(theListView.ItemsSource);
dataView.Refresh();

加载中…