ListBox с ProgressBar [WPF, C#]

2014-05-09 21-11-14 ListBoxWithProgressBarВ этой статье опишу как сделать так, чтобы каждый элемент ListBox‘а имел свой ProgressBar.

Создайте новой WPF-приложение (с названием ListBoxWithProgressBar), переименуйте главное окно в WndMain, добавьте на форму ListBox (измените свойство HorizontalContentAlignment на Stretch) и добавьте следующий шаблон элемента:

Думаю, все ясно 🙂 Создаем грид с двумя колонками, в первую добавляем блок с текстом, во вторую прогресс бар с текстовым блоком (который будет отображать проценты). С помощью Binding мы осуществляем привязку к полям класса ListBoxDataItem (который будет описан ниже).

Вот весь код главного окна (также была добавлена кнопка старта):

Теперь перейдем к написанию логики.

Добавим классу формы 2 переменные:

Первая — массив элементов ListBox, вторая — поток, в котором будем запускать заполнение прогресс баров.

Далее добавьте класс ListBoxDataItem:

Добавим метод для заполнения ListBox‘а элементами:

Создадим обработчик события Window_Closing, который срабатывает во время закрытия окна. В этом обработчике будет прерывать поток, в котором происходит заполнение прогресс баров:

Теперь перейдем к самому заполнению прогресс баров:

Из кода выше видно, что в цикле идем по всем элементам ListBox‘а, приводим их к типу ListBoxDataItem, создаем на основе старых элементов новые, при этом увеличивая значение прогресса на 1 и меняя цвет фона на желтый. Это делаем с задержкой до тех пор, пока прогресс не достигнет 100. Далее меняем цвет текущего элемента на зеленый. И эти действия повторяем для каждого элемента.

И наконец, создадим обработчик клика для кнопки и запустим поток с заполнением прогресс баров:

На этом всё. Можно компилировать и смотреть результат.

Исходники можно взять на GitHub.

Запись опубликована в рубрике Статьи по C# с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *