【发布时间】:2022-01-19 19:50:59
【问题描述】:
我有一个用作调色板的列表框。颜色是用十六进制代码添加的。 十六进制代码对于人类(至少是我)来说很难阅读,这就是为什么我想为我的 ListBox 中的项目着色。
作为我的意思的一个例子,我有一个简单的 TextBox,它正在被着色:
System.Drawing.Color? color = cl.ColorFromHexString(Basecolor.Text);
if (color != null)
{
System.Drawing.Color col = (System.Drawing.Color)color;
this.Basecolor.Foreground = new SolidColorBrush(cl.ToMediaColor(col));
}
使用以下代码分配列表框项(可能不是最佳实践):
List<String> ColorStringPalette = new List<string>();
private void AddColorButton_Click(object sender, RoutedEventArgs e)
{
System.Drawing.Color? color = cl.ColorFromHexString(ColorHexCode.Text);
if (color != null)
{
if (!ColorStringPalette.Contains(ColorHexCode.Text))
{
ColorStringPalette.Add(ColorHexCode.Text);
}
ColorList.ItemsSource = ColorStringPalette;
}
}
为列表框的各个项目设置前景色的适当方法是什么?
【问题讨论】:
-
请注意,
System.Drawing.Color不是 WPF,而是 WinForms。使用System.Windows.Media.Color。将一组 Color 对象分配给 ListBox 的 ItemsSource。在 ItemTemplate 中,使用当前项目作为填充 UIElement 的 SolidColorBrush 的颜色。 -
媒体颜色在
new SolidColorBrush(cl.ToMediaColor(col));处理 -
但这有意义吗?肯定不是。 WPF 已经提供了与您的
cl.ColorFromHexString方法等效的方法,该方法返回 System.Windows.Media.Color。 -
绘图颜色用于在位图上绘图。那些需要绘制颜色。问题是可能会添加 6 位十六进制代码(返回绘图颜色)或 8 位十六进制代码(返回媒体颜色)