C#中的不同颜色表

时间:2011-09-06 15:01:17

标签: c# wpf silverlight colors

我想要一张包含各种颜色的表格。随后的颜色应该有很大不同。根据这个来填充相当大的桌子的最佳方法是什么?我想在重复相似的颜色之前使用大量不同的颜色。

2 个答案:

答案 0 :(得分:1)

这是我的解决方案(与Silverlight兼容)。

    IEnumerable<Color> VaryingColors(int seedIndex)
    {
        int maxValue = 1 << 24;
        int index = seedIndex % maxValue;

        while (true)
        {
            byte r = 0;
            byte g = 0;
            byte b = 0;

            for (int i = 0; i < 24; i++)
            {
                if ((index & (1 << i)) != 0)
                {
                    switch (i % 3)
                    {
                        case 0: r |= (byte)(1 << (23 - i) / 3); break;
                        case 1: g |= (byte)(1 << (23 - i) / 3); break;
                        case 2: b |= (byte)(1 << (23 - i) / 3); break;
                    }
                }
            }

            yield return Color.FromArgb(0xFF, r, g, b);

            index = (index + 1) % maxValue;
        }
    }

这是一个用法示例。创建一个新的Silverlight应用程序并添加ListBox MainPage.xaml,如下所示: -

    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Rectangle Width="200" Height="20" Fill="{Binding}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

在MainPage.Xaml.cs构造函数中包含如下代码: -

   DataContext = VaryingColors(0).Take(100).Select(c => new SolidColorBrush(c));

颜色生成器将生成所有16百万种可能的颜色,并首先操作R G B组件的最高有效位。可能需要更多的工作,有些相邻颜色的出现比序列的其余部分更相似,尽管它们总是可以辨别出来。

一种增强可能是在序列上添加过滤器以丢弃太暗或饱和度非常低的颜色。事实上,可能会添加另一个过滤器来丢弃颜色,该颜色的色调接近序列中的前一种颜色。

答案 1 :(得分:-1)

您可以在C#中使用Gridview,然后使用

GridView_RowDataBound(object sender, GridViewRowEventArgs e)

将细胞的背景颜色更改为您需要的任何颜色的方法。

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
    e.Row.Cells[4].BackColor = System.Drawing.Color.FromName("#EE3333"); // makes the 4th cell red
    e.Row.BackColor = System.Drawing.Color.ForestGreen; // Makes the whole row Green
    }

使用此方法,您可以使用RGB颜色根据自己的喜好为单元格着色。

http://rgbchart.com/

http://www.tayloredmktg.com/rgb/