带有彩色项目的 wpf 列表框
Posted
技术标签:
【中文标题】带有彩色项目的 wpf 列表框【英文标题】:wpf listbox with colorized items 【发布时间】: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 位十六进制代码(返回媒体颜色)
【参考方案1】:
您可以更改 ItemTemplate 并绑定 Foreground(它需要画笔但会从字符串转换):
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding" Foreground="Binding"/>
</DataTemplate>
</ListBox.ItemTemplate>
【讨论】:
你也可以使用颜色名称:***.com/questions/65815311/…以上是关于带有彩色项目的 wpf 列表框的主要内容,如果未能解决你的问题,请参考以下文章