Подтвердить что ты не робот

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

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

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

Ответ 1

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

Ответ 2

Проще говоря, если вы пытаетесь запустить индикатор выполнения, но в качестве неопределенного бара, вы должны установить свойство 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;
}

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

Ответ 3

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

Ответ 4

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

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

myProgressBar.IsIndeterminate = true;

Ответ 5

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

progressBar.Visibility = Visibility.Visible;

progressBar.Visibility = Visibility.Collapsed;

Ответ 6

Это не реальная разница, чем @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; лучше обновить значение, но для тех, кто хочет видеть это в действии...

Ответ 7

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