Индикация прогресса. ProgressBar и ActivityIndicator

Последнее обновление: 14.12.2022

ProgressBar

Элемент ProgressBar представляет горизонтальную полосу, которая отображает прогресс некоторого действия.

Класс ProgressBar определяет два свойства:

  • Progress представляет значение типа double, которое представляет значение прогресса. Данное число находится в диапазоне от 0 до 1. Значение по умолчанию - 0.

    Стоит отметить, что значения меньше 0 будут округлены до 0, а значения больше 1 будут округлены до 1

  • ProgressColor устанавливает цвет элемент

Например:

namespace HelloApp
{
    class StartPage : ContentPage
    {
        public StartPage()
        {
            StackLayout stackLayout = new StackLayout { Padding = 20 };

            Label label = new Label { Text = "ProgressBar" };
            ProgressBar progressBar = new ProgressBar{ Progress = 0.4, ProgressColor = Colors.SeaGreen };

            stackLayout.Children.Add(label);
            stackLayout.Children.Add(progressBar);
            Content = stackLayout;
        }
    }
}

В данном случае устанавливаем в качестве начального значения 0.4, а в качестве цвета - зеленый цвет

ProgressBar в .NET MAUI в C#

Аналогичный пример в XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HelloApp.MainPage">

    <StackLayout Padding="20">
        <Label Text="Progressbar" />
        <ProgressBar Progress="0.4" ProgressColor="SeaGreen" />
    </StackLayout>

</ContentPage>

Манипулируя значением свойства Progress, мы можем динамически изменять индикацию процесса. Например, эмулируем некоторый процесс:

namespace HelloApp
{
    class StartPage : ContentPage
    {
        ProgressBar progressBar = new ProgressBar { ProgressColor = Colors.SeaGreen };
        Label label = new Label();
        public StartPage()
        {
            StackLayout stackLayout = new StackLayout { Padding = 20 };

            stackLayout.Children.Add(label);
            stackLayout.Children.Add(progressBar);
            Content = stackLayout;
        }
        protected override async void OnAppearing()
        {
            while(progressBar.Progress < 0.9)
            {
                progressBar.Progress += 0.1;
                label.Text = $"Состояние процесса: {Math.Round(progressBar.Progress, 1) * 100} %";
                await Task.Delay(1000);
            }
            label.Text = "Процесс закончен";
            base.OnAppearing();
        }
    }
}

В методе OnAppearing(), который вызывается, когда страница начинаеть отображаться на экране, в цикле while увеличиваем текущее значение ProgressBar, пока оно меньше 0.9. И для имитации делаем задержку в секунду, отображая с помощью метки состояние прогресса.

Индикация прогресса действия с помощью элемента ProgressBar в .NET MAUI в C#

ActivityIndicator

ActivityIndicator похож на ProgressBar, только отображает процесс с помощью кругового индикатора. Он определяет два свойства:

  • IsRunning: при значении true индиктор активен.

  • Color: цвет индикатора

Определение в коде C#:

ActivityIndicator activityIndicator = new ActivityIndicator { IsRunning = true, Color = Colors.SeaGreen };

Определение в коде XAML:

<ActivityIndicator IsRunning="true" Color="SeaGreen" />

Имитируем некоторый процесс, и пока процесс идет, отобразим индикатор:

namespace HelloApp
{
    class StartPage : ContentPage
    {
        ActivityIndicator activityIndicator = new ActivityIndicator { IsRunning = true, Color = Colors.SeaGreen };
        Label label = new Label();
        public StartPage()
        {
            StackLayout stackLayout = new StackLayout { Padding = 20 };

            stackLayout.Children.Add(label);
            stackLayout.Children.Add(activityIndicator);
            Content = stackLayout;
        }
        protected override async void OnAppearing()
        {
            int count = 0;
            while (count != 100)
            {
                label.Text = $"Состояние процесса: {count} %";
                await Task.Delay(2000);
                count +=10;
            }
            label.Text = "Процесс закончен";
            activityIndicator.IsRunning = false;
            base.OnAppearing();
        }
    }
}
Индикация прогресса действия с помощью элемента ActivityIndicator в .NET MAUI в C#
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850