C#.Net未指定字符串到颜色转换器
在这种情况下,我有一个客户列表,我想用颜色表示。我如何制作一个转换器来根据客户名称或名称的一部分生成颜色C#.Net未指定字符串到颜色转换器,c#,wpf,colors,C#,Wpf,Colors,在这种情况下,我有一个客户列表,我想用颜色表示。我如何制作一个转换器来根据客户名称或名称的一部分生成颜色 public class Customer { public string CustomerName {get; set;} //other properties unrelated to the question.... } 然后在XAML某处,我希望能够执行以下操作: <TextBlock Text="{Binding CustomerName}"
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}}"/>
我不需要写出整个转换器,只需要一些关于如何将未指定的字符串转换为颜色的想法。颜色是用十六进制表示的(如HTML页面)还是系统。画笔颜色?你可以做一些非常简单的事情,比如:
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";
}
}
}
Customer ted = new Customer();
ted.FirstName = "Ted";
ted.LastName = "Smith";
//this will give you "blue"
var color = ted.Color;
然后你会这样使用它:
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";
}
}
}
Customer ted = new Customer();
ted.FirstName = "Ted";
ted.LastName = "Smith";
//this will give you "blue"
var color = ted.Color;
我真的需要更多关于你的应用程序的外观以及你需要返回的颜色的信息。要定义一种颜色,你需要3个介于0和255之间的数字(红色、绿色和蓝色)。您可以做一些简单的事情,比如使用名称前三个字母的ASCII值来生成颜色。您可以获取名称前三个字符的二进制值,并将其转换为红色、绿色和蓝色值。但问题是,常规名称的开头(假设仅为大写字符)仅为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,得到[0255]范围内的值
这确实是一个你应该自己动手做实验的问题,这通常很有趣。你能发布一些代码让我们了解你使用的是什么数据结构吗?还不清楚,这是一个相当少的客户吗?他们每次都必须是相同的颜色吗?等等。一个可能是y您需要。很抱歉,这是一个100+的客户列表。如果颜色不是唯一的,我可以,但我希望有相当多的变化。感谢您的回复。我希望在配色方案中有更大的变化,使用这种方法,对各种所需颜色进行暴力编码将变得非常乏味。@PrattHinds好的,然后请定义e您希望如何根据姓名添加颜色。您可以轻松、动态地添加颜色,但这取决于要求。您是否希望为每个独特的人获得唯一的颜色?这很容易。颜色不一定必须是唯一的,因此我希望颜色与客户一致将用于字体颜色设置,以识别客户以及图形和数据网格颜色。