Как вы показываете прогресс, когда Indeterminate= "True" в индикаторе выполнения WPF?

Это должен быть самый простой из всех вопросов, но я не могу понять это. У меня есть индикатор прогресса на месте, как я могу показать прогресс. Как мне начать?

<ProgressBar x:Name="ProgressUpload" Margin="5" IsIndeterminate="True" ></ProgressBar>

7 ответов


Если вы установите IsIndeterminate в True, прогресс означает, что что-то происходит, но вы не можете определить точную продолжительность. Поэтому я могу только сказать вам установить его в false и использовать индикатор выполнения в его "стандартном" поведении.


проще говоря, если вы пытаетесь запустить индикатор выполнения, но как неопределенный бар, то вы должны установить свойство IsIndeterminate в true, когда готово и false, когда закончено.

другими словами:

pbar.IsIndeterminate = true; //This starts your bar's animation
pbar.IsIndeterminate = false; //This stops your bar's animation

чтобы дать вам контекст, почему вы хотите сделать это таким образом, посмотрите на следующий код psuedo:

//Some method that is going to start something that is going to take a while
public void StartLongRunningProcess()
{
    //Make a call to a web service asynchronously etc...

    //Start the animation for your progress bar
    pbar.IsIndeterminate = true;
}

//The method (delegate) that handles the result, usually from an event.
//This method will handle the result of the asynchronous call 
public void HandlerForLongRunningProcess()
{
    //Do stuff with result from your asynchronous web service call etc...

    //Stop the animation for your progress bar
    pbar.IsIndeterminate = false;
}

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


по-видимому, в некоторых средах высота должна быть установлена явно для запуска неопределенной анимации, в то время как на других она не нужна.


не устанавливайте его в IsIndeterminate во время инициализации (т. е. дизайнера пользовательского интерфейса в XAML или конструктора на стороне кода) окна, которому он принадлежит. Если вы это сделаете, анимация не запустится. Установите его в обработчике событий Loaded.

Я бы IsIndeterminate = 'False' на стороне XAML, а затем в Window_Loaded событие, установил:

myProgressBar.IsIndeterminate = true;

возможным обходным путем проблемы является просто показать или скрыть элемент управления ProgressBar:

progressBar.Visibility = Visibility.Visible;

progressBar.Visibility = Visibility.Collapsed;

это не реальная разница, чем @dyslexicanaboko выше, но это быстро и легко сделать для демонстрации, которую вы можете контролировать:

в XAML:

<Button Content="Start Process" HorizontalAlignment="Center" Click="StartAProcess"/>
<Button Content="Stop Process" HorizontalAlignment="Center" Click="StopAProcess"/>
<ProgressBar Name="pBar1" Height="20"/>

в коде:

Public Sub StartAProcess()
  pBar1.IsIndeterminate = True
End Sub

Public Sub StopAProcess()
  pBar1.IsIndeterminate = False
End Sub

при нажатии кнопки Начать процесс анимация будет запускаться и продолжаться до тех пор, пока не будет нажата кнопка остановить процесс. Это должно быть очевидно, но параметр IsIndeterminate не является хорошей практикой пользовательского интерфейса; лучше фактически обновить значение, но для тех, кто хочет видеть это в действии...


также убедитесь, что CacheMode="BitmapCache" не установлен на Вашей странице - иначе анимация не будет запущена. Он просто отображает кэшированное растровое изображение...