【问题标题】:How to make alternating background color for ItemsControl rows (Silverlight)?如何为 ItemsControl 行(Silverlight)制作交替背景颜色?
【发布时间】:2011-07-04 21:20:39
【问题描述】:

如何为 ItemsControl 行制作交替的背景颜色?

【问题讨论】:

标签: c# silverlight background-color


【解决方案1】:

这不是ItemsControl 的内置函数。您可以做的是扩展ItemsControl 以满足要求。

很好的例子可以从here找到

【讨论】:

    【解决方案2】:

    我从Joe McBride 获取代码并将其概括为让您指定要设置的属性(默认为Background)以及在交替之前每种颜色的行数(默认为1),并且不需要任何外部文件.

    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);
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-17
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      相关资源
      最近更新 更多