Как изменяется цвет переднего плана только на одной строке списка wpf? - PullRequest
3 голосов
/ 28 мая 2011

как изменяется цвет текста переднего плана (не выделенный текст или фон выделения) в списке wpf?скажем, например, я хотел сделать все буквы «а» зелеными, все буквы «б» красными и т. д.?Как я могу программно сделать это, как я добавляю их в 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 ]

4 голосов
/ 28 мая 2011

Используйте шаблон в сочетании с конвертером:

<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();
    }
}
2 голосов
/ 29 мая 2011

Я согласен с предыдущим ответом, но вы также можете добавить элементы списка в список (вместо строк), чтобы вы могли изменить цвет переднего плана перед добавлением его в список.

1 голос
/ 19 апреля 2013

Для построения на основе вышеуказанного решения:

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