When your WPF ProgressBar is causing lots of CPU usage, even if it is not visible any more, this most likely is caused by the IsIndeterminate property, which - when set to true - simply continues the animation to be running in the background.
One solution is to bind the IsIndeterminate property to the same underlying value as the Visibility property, for example something like this:
<ProgressBar IsIndeterminate="{Binding IsBusy}"
Visibility="{Binding IsBusy,
Converter={StaticResource VisibilityConverter}}"/>
The IsBusy property of the bound DataSource can then represent whatever condition is suited in this scenario.
Thanks to
Adam for this tip!