В WPF Extended Toolkit есть индикатор занятости , который я использовал довольно часто:

Набор инструментов удобно доступен через NuGet, что позволяет очень легко добавить его в качестве ссылки на ваш проект.Я лично использовал его (наряду со многими другими полезными элементами управления в этом наборе инструментов) почти во всех моих недавних проектах WPF.
Чтобы использовать его, окружите свои элементы управления в коде XAML с помощью индикатора занятости:
<extToolkit:BusyIndicator ...>
<Grid>
<Button Content="Click to do stuff" />
<!-- your other stuff here -->
</Grid>
</extToolkit:BusyIndicator>
Тогда вам просто нужно установить для свойства IsBusy
значение true
, когда вы хотите, чтобы всплывающее окно появлялось, и значение false, когда оно должно быть скрыто.В правильной архитектуре MVVM вы, как правило, привязываете свойство XAML к свойству в вашей модели представления, для которого вы соответственно устанавливаете значение true / false:
<extToolkit:BusyIndicator IsBusy="{Binding IsBusy}" >
Но если вы не используете MVVM, вы можетеконечно, установите его вручную из своего кода, как правило, в обработчике нажатий кнопок:
Дайте элементу управления имя, чтобы можно было ссылаться на него из кода:
<extToolkit:BusyIndicator x:Name="busyIndicator" >
И затем,в вашем файле xaml.cs:
void myButton_Click(object sender, RoutedEventArgs e)
{
busyIndicator.IsBusy = true;
// Start your background work - this has to be done on a separate thread,
// for example by using a BackgroundWorker
var worker = new BackgroundWorker();
worker.DoWork += (s,ev) => DoSomeWork();
worker.RunWorkerCompleted += (s,ev) => busyIndicator.IsBusy = false;
worker.RunWorkerAsync();
}