Это должен быть самый простой из всех вопросов, но я не могу понять его. У меня есть индикатор выполнения, как я могу показать его прогресс. Как мне начать?
<ProgressBar x:Name="ProgressUpload" Margin="5" IsIndeterminate="True" ></ProgressBar>
Это должен быть самый простой из всех вопросов, но я не могу понять его. У меня есть индикатор выполнения, как я могу показать его прогресс. Как мне начать?
<ProgressBar x:Name="ProgressUpload" Margin="5" IsIndeterminate="True" ></ProgressBar>
Если вы установите IsIndeterminate в True, прогресс имеет значение, что что-то происходит, но вы не можете определить точную продолжительность. Поэтому я могу только сказать вам установить его в false и использовать индикатор выполнения в своем "стандартном" поведении.
Проще говоря, если вы пытаетесь запустить индикатор выполнения, но в качестве неопределенного бара, вы должны установить свойство IsIndeterminate равным true, когда оно готово, и false, когда закончите.
Итак, другими словами:
pbar.IsIndeterminate = true; //This starts your bar animation
pbar.IsIndeterminate = false; //This stops your bar 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 или конструктор на стороне кода) окна, которое его владеет. Если вы это сделаете, анимация не запустится. Установите его в обработчик события "Загруженный".
Я бы имел 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 не является хорошей практикой UI; лучше обновить значение, но для тех, кто хочет видеть это в действии...
Также убедитесь, что CacheMode = "BitmapCache" не установлен на вашу страницу, иначе анимация не будет запущена. Он просто отображает кэшированное растровое изображение...