仅仅在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);
}
将模板与转换器结合使用:
<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);
}