带有彩色项目的 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 列表框的主要内容,如果未能解决你的问题,请参考以下文章

WPF列表框在拖动时自动滚动

带有按钮的 WPF 列表框样式

从其他窗口将新项目添加到列表框

WPF 从列表框中拖动项目并放入文本框中

使 WPF 中的列表框项目不可选

WPF 列表框项目