Как вы показываете прогресс, когда 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" не установлен на Вашей странице - иначе анимация не будет запущена. Он просто отображает кэшированное растровое изображение...