C#.Net未指定字符串到颜色转换器

时间:2016-01-15 20:47:00

标签: c# wpf colors

在这种情况下,我有一个客户列表,我想用颜色表示。如何根据客户名称或名称的一部分使转换器生成颜色?

public class Customer
{
    public string CustomerName {get; set;}

    //other properties unrelated to the question....
}

然后在XAML的某个地方,我希望能够做到以下几点:

<TextBlock Text="{Binding CustomerName}"
           Foreground="{Binding CustomerName, 
           Converter={StaticResource MyStringToColorConverter}}"/>

我不需要写出整个转换器,只是关于如何将未指定的字符串转换为颜色的一些想法。

3 个答案:

答案 0 :(得分:1)

您可以获取其名称前3个字符的二进制值,并将其转换为红色,绿色和蓝色值。事情是,常规名称开始(假设只是大写字符)只有256个可能的二进制值中的26个,所以你需要做一些加法和乘法来得到0-1范围。如果您想要红色,绿色和蓝色的每个超过26个离散值,请考虑聚合多个字母的值。

一旦你有一个0-1范围内的数字,你想要做的下一件事可能是将值标准化以避免超暗或超亮色。一种可能的方法是使用标准规范化方法,如下所示。

intensity = sqrt(R*R + G*G + B*B)
if(intensity != 0)
{
    R = R / intensity;
    G = G / intensity;
    B = B / intensity;
}

这是计算机图形中经常使用的东西,基本上你在与原始矢量相同的方向上创建长度为1的矢量。在这种情况下,我们将RGB值视为矢量。想象一下,想象RGB颜色空间是3D平面,红色是X轴,绿色是Y轴,蓝色是Z轴;此等式为您提供半径为1的球体上的任何颜色(包括纯红色,纯绿色,纯蓝色以及其间的所有组合。)

最后一步是将每个rgb乘以255得到[0,255]范围内的某些东西。

这真的是你应该乱搞并试验自己的问题之一,它通常很有趣。

答案 1 :(得分:0)

颜色是以十六进制表示(如HTML页面)还是System.Drawing画笔颜色?你可以做一些非常简单的事情:

using Application;

然后你就像这样使用它:

    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Color
        {
            get
            {
                if (this.FirstName.StartsWith("fr", StringComparison.OrdinalIgnoreCase))
                    return "red";
                else if (this.FirstName.ToLower().Contains("jeff"))
                    return "green";
                else if (this.LastName.ToLower() == "smith")
                    return "blue";
                return "black";
            }
        }
    }

我真的需要更多关于你应用程序外观的信息,以及你需要返回的颜色。

答案 2 :(得分:0)

要定义颜色,您需要3到0到25​​5之间的数字(红色,绿色和蓝色)。你可以做一些简单的事情,比如使用名字前三个字母的ASCII值来生成颜色。