仅仅在wpf列表框的一行上,前景颜色是如何变化的

本文关键字:变化 颜色 何变化 一行 列表 wpf | 更新日期: 2023-09-27 17:57:56

如何更改wpf列表框中的前景文本颜色(而不是所选文本或所选内容的背景)?比如说,我想让所有字母"a"项目都是绿色的,所有字母"b"项目是红色的,等等?当我在c中添加它们时,我如何以编程方式做到这一点?我能找到的只是人们发布关于更改所选文本的帖子,我想更改前景文本的颜色,使其看起来更有条理。

顺便说一句,为什么斯塔克夫弗洛在这个问题上给我出问题?他说这个问题"不符合质量标准"。我认为这是一个完全合理的问题。对这个问题进行了什么过滤,使它不符合任何标准?

我想做这个:

string[] pics= Directory.GetFiles(@"C:''", "*.jpg");
        foreach (string pic in pics)
        {
            CHANGE THE FOREGROUND COLOR TO RED
            lbxFileList.Items.Add(pic);
        }
string[] vids= Directory.GetFiles(@"C:''", "*.mpg");
        foreach (string vid in vids)
        {
            CHANGE THE FOREGROUND COLOR TO GREEN
            lbxFileList.Items.Add(vid);
       }

仅仅在wpf列表框的一行上,前景颜色是如何变化的

将模板与转换器结合使用:

<ListBox x:Name="lbxFileList">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel>
         <TextBlock Text="{Binding Path=.}" ForeGround={Binding ., Converter={StaticResource ItemToBrushConverter}}/>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

转换器应该将您的物品转换为具有您想要的颜色的Brush

class FileNameToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        return value.EndsWith("mpg") ? Brushes.Green : Brushes.Red;
    }
    public object ConvertBack(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我同意前面的答案,但您也可以将listboxitems添加到您的列表框中(而不是字符串),这样您就可以在将其添加到列表框之前更改前景色。

要在上述解决方案的基础上构建:

foreach (string pic in pics)
{
    if (string.IsNullOrEmpty(pic))
        continue;
    string first = pic.Substring(0, 1);
    Color color;
    switch (first.ToLower())
    {
        case "a":
            color = Colors.Green;
            break;
        case "b":
            color = Colors.Red;
            break;
        default:
            color = Colors.Black;
    }
    ListBoxItem item = new ListBoxItem() {
        Content = pic,
        Foreground = new SolidColorBrush(color)
    };
    lbxFileList.Items.Add(pic);
}