powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Поменять цвет шрифта у конкретного элемента listbox
36 сообщений из 36, показаны все 2 страниц
Поменять цвет шрифта у конкретного элемента listbox
    #37719116
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю в WPF.
два форума молчат, хз что делать... вроде суть не сложна. может не так как-то спрашиваю?

Необходимо поменять цвет шрифта у конкретного элемента listbox.
пишу так:
Код: c#
1.
listbox.items[index].Foreground=Brushes.Green;


но не работает. пишет что нет такого определения "Foreground"

тогда как мне, зная индекс нужного элемента, "программно" изменить цвет его шрифта?
xaml:
Код: xml
1.
2.
3.
<ListBox Background="White" Name="listBox1">
     <ListBoxItem Foreground="Red" Content="qweqwe" />
</ListBox>



п.с. Добавляются item'ы программно, так:
Код: c#
1.
listBox.ItemsSource=itemsArray;
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37719292
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

ItemsControl.ItemContainerStyleSelector
Или
<ListBoxItem Foreground="{Binding SomeProperty}" Content="qweqwe" />
?
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37719303
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lincoln Dead,

(listbox.items[index] as FrameworkElemet).Foreground=Brushes.Green;

что нить типа такого? ну или к какому нить другому типу привести, у которого есть Foreground.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37719305
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sky Dragon,

У ListBoxItem есть Foreground, но это WinForms подход.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37719338
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln DeadНеобходимо поменять цвет шрифта у конкретного элемента listbox.
пишу так:
Код: c#
1.
listbox.items[index].Foreground=Brushes.Green;


но не работает. пишет что нет такого определения "Foreground"
Правильно и пишет. items[index] является object, у которого нет Foreground.
Какие именно объекты содержатся в itemsArray?
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37719453
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37719459
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

вот даже ваш случай
доставайте item и меняйте ему background
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720198
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за ответы всем! не ожидал так много.

работает так:
Код: c#
1.
2.
            ListBoxItem lbi = listBox1.Items[0] as ListBoxItem;
            lbi.Foreground = Brushes.Green;



и так:
Код: c#
1.
2.
            ListBoxItem lbi = listBox1.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem;
            lbi.Foreground = Brushes.Green;



но работает только в том случае когда итемы созданы вручную. А иначе, когда заношу их программно - нет. Т.е. вот так:
Код: c#
1.
2.
3.
            listBox1.ItemsSource = itemsArray;//<
            ListBoxItem lbi = listBox1.Items[0] as ListBoxItem;
            lbi.Foreground = Brushes.Green;
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720211
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

Код: c#
1.
ListBoxItem lbi = listBox1.Items[0] as ListBoxItem;


ошибка в том, что items и itemssource это разные вещи.
начав с itemssource ты и должен продолжать с ним работать.
и для items соотвественно. они не пересекаются.

поэтому бери свои listboxitem из itemssource уже.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720235
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKLincoln Dead,

Код: c#
1.
ListBoxItem lbi = listBox1.Items[0] as ListBoxItem;


ошибка в том, что items и itemssource это разные вещи.
начав с itemssource ты и должен продолжать с ним работать.
и для items соотвественно. они не пересекаются.

поэтому бери свои listboxitem из itemssource уже.
я попробовал использовать вместо ItemsSource вот это:
Код: c#
1.
listBox1.Items.Add("123123");


та же картина
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720247
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

тогда объясни, где косяк.
чето то ты ввел в заблуждение.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720266
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

и слова "вручную" и "программно" разные по смыслу?
а то как то не понятно, одинаковые они или различаются по смыслу.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720286
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKLincoln Dead,

тогда объясни, где косяк.
чето то ты ввел в заблуждение.

я и сам озадачен.

сейчас попробовал сделать так:
ввёл вручную три итема:
123
234
345
затем программно вписал еще два итема:
Код: c#
1.
2.
            listBox1.Items.Add("456");
            listBox1.Items.Add("567");


и делаю 345 зеленым:
Код: c#
1.
2.
            ListBoxItem lbi = listBox1.Items[2] as ListBoxItem;
            lbi.Foreground = Brushes.Green;


выходит вот что:


а вот 456 и 567 зелеными сделать не получается
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720293
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

расскажи, что такое "ввел вручную" ?
через дизайнер студии или что?
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720295
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKLincoln Dead,

расскажи, что такое "ввел вручную" ?
через дизайнер студии или что?
да, программно - это кодом.
а вручную это так:
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720298
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

а, как ты меняешь цветы у других элементов?
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720308
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKLincoln Dead,

а, как ты меняешь цветы у других элементов?
также.
Код: c#
1.
2.
            ListBoxItem lbi = listBox1.Items[/*тут пишу индкес. 0, 1 и 2 работают, а 3 и 4(которые я занёс через код - нет*/] as ListBoxItem;
            lbi.Foreground = Brushes.Green;
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720355
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,
проект тестовый прикрепи к сообщению. скачаем проверим.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720369
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

okay, скоро выложу
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720384
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,
лови
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720406
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Deadно работает только в том случае когда итемы созданы вручную. А иначе, когда заношу их программно - нет. Т.е. вот так:
Код: c#
1.
2.
3.
            listBox1.ItemsSource = itemsArray;//<
            ListBoxItem lbi = listBox1.Items[0] as ListBoxItem;
            lbi.Foreground = Brushes.Green;



Все таки спрошу еще раз, какого типа объекты содержаться в itemsArray?!

В выложенном Вами проекте в принципе ничего работать так как Вы хотите не сможет!
Попробуйте вдуматься в две строки из проекта, который Вы выложили:
Код: c#
1.
2.
listBox1.Items.Add("789");
ListBoxItem lbi = listBox1.Items[1] as ListBoxItem;


Как компьютер из object сможет сделать ListBoxItem ?! Вот string сможет, потому что Вы добавляли в него string. Прочитайте про приведение типов. И выложите проект в котором используется itemsArray!
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720410
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720418
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

Код: c#
1.
2.
3.
4.
5.
6.
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0);

            lbi.Foreground = Brushes.Green;
        }



вот это добавь на событие loaded у окна.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720456
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexxxxxВсе таки спрошу еще раз, какого типа объекты содержаться в itemsArray?!

там тоже string
Код: c#
1.
string[] itemsArray=new string[]{"111","222","333","444"};
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720487
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Deadтам тоже string
Чет я прозевал где он это сказал.

Скажите, а почему указанный вами ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0); в конструкторе окна ничего не возвращает? В чем секрет?
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720499
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexxxxxLincoln Deadтам тоже string
Чет я прозевал где он это сказал.

кто "он"?
LexxxxxСкажите, а почему указанный вами ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0); в конструкторе окна ничего не возвращает? В чем секрет?
возвращает он всё. как и ListBoxItem lbi = listBox1.Items[index] as ListBoxItem;. Но дело в том что он не работает на итемах которые созданы программным кодом:
string[] itemsArray=new string[]{"111","222","333","444"};
либо таким:
listBox1.Items.Add("111");
listBox1.Items.Add("222");
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720510
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexxxxxLincoln Deadтам тоже string
Чет я прозевал где он это сказал.

Скажите, а почему указанный вами ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0); в конструкторе окна ничего не возвращает? В чем секрет?

все просто.
потому что listboxitem`Ы еще не созданы.
они создаютс в момент, когда загружается scrollviewer у листбокса.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720513
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Deadкто "он"?
Вы. Это я уже просто запутался в ответах.
Вопрос про ItemContainerGenerator адресовался AlexeiK.

Lincoln Deadвозвращает он всё. как и ListBoxItem lbi = listBox1.Items[index] as ListBoxItem;. Но дело в том что он не работает на итемах которые созданы программным кодом:
string[] itemsArray=new string[]{"111","222","333","444"};
либо таким:
listBox1.Items.Add("111");
listBox1.Items.Add("222");
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            listBox1.Items.Add("123");
            listBox1.Items.Add("456");
            listBox1.Items.Add("789");

            ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0);
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0);
            lbi.Foreground = Brushes.Green;
        }
    }



Посмотрите на значение lbi в конструкторе и в Window_Loaded. Работает он нормально (не в конструкторе).
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720514
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKLexxxxxпропущено...

Чет я прозевал где он это сказал.

Скажите, а почему указанный вами ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0); в конструкторе окна ничего не возвращает? В чем секрет?

все просто.
потому что listboxitem`Ы еще не созданы.
они создаютс в момент, когда загружается scrollviewer у листбокса.

я тоже так подумал и написал так:
Код: c#
1.
2.
3.
4.
while (!listBox1.HasItems) ;

ListBoxItem lbi = listBox1.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
lbi.Foreground = Brushes.Green;



всё равно...
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720515
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,


вот тебе файлик. все работает, на тех, которые я создал через дизайнер ну или xaml.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720517
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKвсе просто.
потому что listboxitem`Ы еще не созданы.
они создаютс в момент, когда загружается scrollviewer у листбокса.
Спасибо.
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720529
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

точно, работает! всё теперь понятно))
спасибо за ответы всем)
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720531
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Deadвсё равно...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            string[] itemsArray = new string[] { "111", "222", "333", "444" };
            listBox1.ItemsSource = itemsArray;

        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0);
            lbi.Foreground = Brushes.Green;
        }
    }


И правда все равно... работает. :)
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720533
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
форум отличный!
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720536
Lincoln Dead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexxxxxLincoln Deadвсё равно...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            string[] itemsArray = new string[] { "111", "222", "333", "444" };
            listBox1.ItemsSource = itemsArray;

        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ListBoxItem lbi = (ListBoxItem)listBox1.ItemContainerGenerator.ContainerFromIndex(0);
            lbi.Foreground = Brushes.Green;
        }
    }


И правда все равно... работает. :)
но я тогда вместо этого просто while написал:
while (!listBox1.HasItems) ;
думал пока не загружено не выполнять изменение цвета. )))
...
Рейтинг: 0 / 0
Поменять цвет шрифта у конкретного элемента listbox
    #37720541
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lincoln Dead,

Код: c#
1.
2.
3.
4.
5.
var item = new ListBoxItem();
item.Content = "123";
listBox1.Items.Add(item);
ListBoxItem lbi = listBox1.Items[1] as ListBoxItem;
lbi.Foreground = Brushes.Green;


Тоже вариант, но вроде как так не комильфо, но прямо в конструкторе можно поменять им цвета, если нужно конечно.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Поменять цвет шрифта у конкретного элемента listbox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]