wpf
wpf copied to clipboard
Indeterminate progress bar used as BitmapCacheBrush target do not animate
Description
When using a BitmapCacheBrush
whose Target
is a ProgressBar
with Indeterminate="True"
, the rendered control does not animate.
Reproduction Steps
Create a new WPF project that targets either .NET 7 (net7.0-windows
) or .NET 8 (net8.0-windows
).
Add the following code to MainWindow.xaml
:
<Window x:Class="BlankWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BlankWpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<ProgressBar x:Key="CachedProgressBar" Width="200" Height="10" IsIndeterminate="True" >
<ProgressBar.CacheMode>
<BitmapCache SnapsToDevicePixels="True" />
</ProgressBar.CacheMode>
</ProgressBar>
<BitmapCacheBrush x:Key="CachedProgressBarBrush" Target="{StaticResource CachedProgressBar}" />
</Window.Resources>
<Grid>
<Rectangle Fill="{StaticResource CachedProgressBarBrush}" Width="200" Height="10" />
</Grid>
</Window>
Run the application.
Expected behavior
An animated, indeterminate progress bar should be rendered. This is the behavior on .NET 6.
Actual behavior
A static, completely filled progress bar is rendered:
Regression?
This is a regression; it used to work in .NET 6.
Known Workarounds
Instead of using a BitmapCacheBrush
, you can use a VisualBrush
and assign its Visual
property to the progress bar (instead of the BitmapCacheBrush.Target
property). This fixes the UI, but obviously is less ideal than using a BitmapCacheBrush
.
Impact
My application uses many progress bars that we synchronize and reduce their overhead with by using the bitmap cache. This bug breaks all of those bars.
Configuration
No response
Other information
No response
Update: I don't know what changed, but the VisualBrush
workaround I shared stopped working, and the bug repros with that now. @Kuldeep-MS and @dipeshmsft can I get an update on this bug? There are now no workarounds to this issue.
We just upgraded our application to .NET 8 from .NET 6 and now we have this problem too. The difference for us is, we were using a second UI thread and a HostVisual to run the progress bar on a second thread, so long running tasks don't make it stutter. Would love for this to get fixed, or to have a workaround.