Индикатор загрузки (progress bar) для WPF

Опубликовано Апр 16, 2009 в WPF | Нет комментариев

Если ваше WPF приложение медленно загружается, то в зависимости от причины есть 2 выхода — или добавлять Splash Screen в случае, когда приложение «тяжелое» само по себе, или ограничится показом индикатора загрузки данных, если само приложение стартует быстро, но потом еще подгружает объемные данные (например 3D модели).

Такая задача возникла и передо мной. Хотелось сделать круговой индикатор загрузки, похожий на индикатор загрузки Silverlight приложений. Быстрый поиск в интернете подобрал 2 подходящих индикатора:

Круговой индикатор загрузки для WPF Вращающийся круговой индикатор загрузки для WPF

http://www.codeproject.com/KB/WPF/FrameBasedAnimation.aspx, http://www.codeproject.com/KB/smart/Sonic.aspx

Первый мне не понравился потому, что во-первых не компилировался без доработок, а во вторых имел огромное количество C# кода, без которого в WPF вполне можно было обойтись, решив всё на уровне XAML.

Второй индикатор был значительно красивее и работал, но крутил всю картинку целиком, не создавая эффект перелива цветов, а вызывая впечатление, что на нём решили сэкономить.

Небольшая доработка заключалась в том, что я заменил DoubleAnimation на DiscreteDoubleKeyFrame и теперь индикатор загрузки не вращается, а красиво переливается.

Вместо:

<BeginStoryboard> 
    <Storyboard> 
        <DoubleAnimation Storyboard.TargetName="SpinnerRotate" Storyboard.TargetProperty="(RotateTransform.Angle)" From="0" To="360" Duration="0:0:01" RepeatBehavior="Forever" /> 
    </Storyboard> 
</BeginStoryboard>

Сделаем так:

<BeginStoryboard> 
    <Storyboard> 
        <DoubleAnimationUsingKeyFrames Duration="0:0:12" RepeatBehavior="Forever" SpeedRatio="12" Storyboard.TargetName="SpinnerRotate" Storyboard.TargetProperty="(RotateTransform.Angle)"> 
            <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="0" /> 
            <DiscreteDoubleKeyFrame KeyTime="00:00:01" Value="30" /> 
... 
            <DiscreteDoubleKeyFrame KeyTime="00:00:11" Value="330" /> 
        </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</BeginStoryboard>

Результат:

Переливающийся круговой индикатор загрузки для WPF

Загрузить компонент Circular Progress Bar и тестовый проект (14,4 Кб)

В следующий раз, я покажу на примере как использовать этот же код для progress bar в Silverlight.

Нет комментариев : “Индикатор загрузки (progress bar) для WPF”

Трекбеки/Пинги

  1. Gis4All » Архив блога » Индикатор загрузки (progress bar) для Silverlight - [...] Индикатор загрузки для WPF рассмотренный ранее теперь доступен и для Silverlight. Изменения минимальны, убрано использование элементов, которые не поддерживает Silverlight,…

Оставить комментарий