如何在wpf列表框的一行上更改前景色?

时间:2011-05-28 12:50:59

标签: c# wpf listboxitem

如何在wpf列表框中更改前景文本颜色(不是所选文本或选区背景)?比方说,例如,我想把所有字母“a”项目设为绿色,所有字母“b”项目为红色等等?我如何以编程方式执行此操作,因为我在c#中添加它们?所有我能找到的是人们发布有关更改所选文本的内容,我想更改前景文本的颜色,使其看起来更有条理。

在旁注,为什么stackoverflow给我这个问题的问题?说“不符合质量标准”的问题。我认为这是一个完全合法的问题。什么过滤器被置于这个问题上,使其不符合任何标准?

我希望这样做:

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);
       }

3 个答案:

答案 0 :(得分:4)

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

<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();
    }
}

答案 1 :(得分:2)

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

答案 2 :(得分:1)

以上述解决方案为基础:

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);
}