如何在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);
}
答案 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);
}