8
如何为ItemsControl行创建交替的背景颜色?如何为ItemsControl行(Silverlight)制作交替背景颜色?
如何为ItemsControl行创建交替的背景颜色?如何为ItemsControl行(Silverlight)制作交替背景颜色?
这不是建立在ItemsControl
的功能。你可以做的是扩展ItemsControl
的要求。
很好的例子可以发现,从here
我从Joe McBride了代码,并推广它,让你指定什么属性交替(默认为1)之前设置(默认为Background
)多少每种颜色的行,而不需要任何外部文件。
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
namespace Converters
{
public class AlternatingRowConverter : IValueConverter
{
public Brush NormalBrush { get; set; }
public Brush AlternateBrush { get; set; }
public int AlternateEvery { get; set; }
public string Property { get; set; }
public AlternatingRowConverter()
{
AlternateEvery = 1;
Property = "Background";
}
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
var element = (FrameworkElement)value;
element.Loaded += Element_Loaded;
return NormalBrush;
}
public object ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
private void Element_Loaded(object sender, RoutedEventArgs e)
{
var element = (FrameworkElement)sender;
DependencyObject obj = element;
do
{
obj = VisualTreeHelper.GetParent(obj);
} while (!(obj is ItemsControl) && obj != null);
var parent = (ItemsControl)obj;
if (parent != null)
{
DependencyObject container =
parent.ItemContainerGenerator.ContainerFromItem(
element.DataContext);
if (container != null)
{
int index = parent.ItemContainerGenerator.IndexFromContainer(
container);
if (index % (AlternateEvery * 2) >= AlternateEvery)
element.GetType().GetProperty(Property)
.SetValue(element, AlternateBrush, null);
}
}
}
}
}
检查[此文章](http://msdn.microsoft.com/en-us/library/ms750769.aspx) – 2011-02-26 15:13:14