Skip to content

Commit 9752645

Browse files
committed
Fixing issue where progress bar stop animating when an indeterminate progress bar has its value changes from zero.
1 parent 93b3d26 commit 9752645

File tree

3 files changed

+51
-26
lines changed

3 files changed

+51
-26
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.Globalization;
3+
using System.Windows.Data;
4+
5+
namespace MaterialDesignThemes.Wpf.Converters
6+
{
7+
public class NotZeroConverter : IValueConverter
8+
{
9+
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
10+
{
11+
if (double.TryParse((value ?? "").ToString(), out double val))
12+
{
13+
return Math.Abs(val) > 0.0;
14+
}
15+
return null;
16+
}
17+
18+
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
19+
{
20+
return Binding.DoNothing;
21+
}
22+
}
23+
}

MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@
281281
<Compile Include="Converters\ClockItemIsCheckedConverter.cs" />
282282
<Compile Include="Converters\ClockLineConverter.cs" />
283283
<Compile Include="Converters\ListViewItemContainerStyleConverter.cs" />
284+
<Compile Include="Converters\NotZeroConverter.cs" />
284285
<Compile Include="Converters\RangeLengthConverter.cs" />
285286
<Compile Include="Converters\RangePositionConverterConverter.cs" />
286287
<Compile Include="Converters\DrawerOffsetConverter.cs" />

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ProgressBar.xaml

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:circularProgressBar="clr-namespace:MaterialDesignThemes.Wpf.Converters.CircularProgressBar"
4-
xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"
5-
xmlns:transitions="clr-namespace:MaterialDesignThemes.Wpf.Transitions">
4+
xmlns:transitions="clr-namespace:MaterialDesignThemes.Wpf.Transitions"
5+
xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters">
66

77
<Style x:Key="MaterialDesignLinearProgressBar" TargetType="{x:Type ProgressBar}">
88
<Setter Property="Foreground" Value="{DynamicResource PrimaryHueDarkBrush}"/>
@@ -121,6 +121,7 @@
121121
<circularProgressBar:LargeArcConverter x:Key="LargeArcConverter" />
122122
<circularProgressBar:RotateTransformConverter x:Key="RotateTransformConverter" />
123123
<circularProgressBar:RotateTransformCentreConverter x:Key="RotateTransformCentreConverter" />
124+
<converters:NotZeroConverter x:Key="NotZeroConverter" />
124125

125126
<Style x:Key="MaterialDesignCircularProgressBar" TargetType="{x:Type ProgressBar}">
126127
<Setter Property="Foreground" Value="{DynamicResource PrimaryHueMidBrush}" />
@@ -136,16 +137,16 @@
136137
</Storyboard>
137138
<Storyboard x:Key="IsFullyIndeterminateScaleStoryboard">
138139
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="FullyIndeterminateGridScaleTransform"
139-
Storyboard.TargetProperty="ScaleX"
140-
RepeatBehavior="Forever">
140+
Storyboard.TargetProperty="ScaleX"
141+
RepeatBehavior="Forever">
141142
<SplineDoubleKeyFrame KeyTime="0" Value="0.0" />
142143
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="1.0" />
143144
<SplineDoubleKeyFrame KeyTime="0:0:4" Value="0.0" />
144145
</DoubleAnimationUsingKeyFrames>
145146
<DoubleAnimation Storyboard.TargetName="RotateTransform"
146-
Storyboard.TargetProperty="Angle"
147-
RepeatBehavior="Forever"
148-
From="00" To="359" Duration="0:0:1.25" />
147+
Storyboard.TargetProperty="Angle"
148+
RepeatBehavior="Forever"
149+
From="00" To="359" Duration="0:0:1.25" />
149150
</Storyboard>
150151
</ControlTemplate.Resources>
151152
<Grid x:Name="TemplateRoot" ClipToBounds="False">
@@ -158,14 +159,13 @@
158159
<Canvas>
159160
<Ellipse Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" />
160161
<Path x:Name="Path" Stroke="{TemplateBinding Foreground}" StrokeThickness="3"
161-
Canvas.Top="2" Canvas.Left="2"
162-
RenderTransformOrigin="0, 0">
162+
Canvas.Top="2" Canvas.Left="2"
163+
RenderTransformOrigin="0, 0">
163164
<Path.Data>
164165
<PathGeometry>
165166
<PathFigure StartPoint="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource StartPointConverter}, Mode=OneWay}">
166-
<ArcSegment Size="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource ArcSizeConverter}, Mode=OneWay}"
167-
SweepDirection="Clockwise"
168-
>
167+
<ArcSegment Size="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource ArcSizeConverter}, Mode=OneWay}"
168+
SweepDirection="Clockwise">
169169
<ArcSegment.IsLargeArc>
170170
<MultiBinding Converter="{StaticResource LargeArcConverter}">
171171
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
@@ -190,8 +190,8 @@
190190
<Path.RenderTransform>
191191
<TransformGroup>
192192
<RotateTransform x:Name="RotateTransform"
193-
CenterX="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}"
194-
CenterY="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}">
193+
CenterX="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}"
194+
CenterY="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}">
195195
<RotateTransform.Angle>
196196
<MultiBinding Converter="{StaticResource RotateTransformConverter}">
197197
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
@@ -206,20 +206,21 @@
206206
</Canvas>
207207
</Grid>
208208
<ControlTemplate.Triggers>
209-
<MultiTrigger>
210-
<MultiTrigger.Conditions>
211-
<Condition Property="IsIndeterminate" Value="True" />
212-
<Condition Property="IsVisible" Value="True" />
213-
</MultiTrigger.Conditions>
214-
<MultiTrigger.EnterActions>
209+
<MultiDataTrigger>
210+
<MultiDataTrigger.Conditions>
211+
<Condition Binding="{Binding IsIndeterminate, RelativeSource={RelativeSource Self}}" Value="True" />
212+
<Condition Binding="{Binding IsVisible, RelativeSource={RelativeSource Self}}" Value="True" />
213+
<Condition Binding="{Binding Value, RelativeSource={RelativeSource Self}, Converter={StaticResource NotZeroConverter}}" Value="True" />
214+
</MultiDataTrigger.Conditions>
215+
<MultiDataTrigger.EnterActions>
215216
<RemoveStoryboard BeginStoryboardName="IsFullyIndeterminateStoryboard" />
216217
<BeginStoryboard Storyboard="{StaticResource IsIndeterminateStoryboard}"
217-
Name="IsIndeterminateStoryboard"/>
218-
</MultiTrigger.EnterActions>
219-
<MultiTrigger.ExitActions>
218+
Name="IsIndeterminateStoryboard"/>
219+
</MultiDataTrigger.EnterActions>
220+
<MultiDataTrigger.ExitActions>
220221
<RemoveStoryboard BeginStoryboardName="IsIndeterminateStoryboard" />
221-
</MultiTrigger.ExitActions>
222-
</MultiTrigger>
222+
</MultiDataTrigger.ExitActions>
223+
</MultiDataTrigger>
223224
<MultiTrigger>
224225
<MultiTrigger.Conditions>
225226
<Condition Property="IsIndeterminate" Value="True" />
@@ -229,7 +230,7 @@
229230
<MultiTrigger.EnterActions>
230231
<RemoveStoryboard BeginStoryboardName="IsIndeterminateStoryboard" />
231232
<BeginStoryboard Storyboard="{StaticResource IsFullyIndeterminateScaleStoryboard}"
232-
Name="IsFullyIndeterminateStoryboard"/>
233+
Name="IsFullyIndeterminateStoryboard"/>
233234
</MultiTrigger.EnterActions>
234235
<MultiTrigger.ExitActions>
235236
<RemoveStoryboard BeginStoryboardName="IsFullyIndeterminateStoryboard" />

0 commit comments

Comments
 (0)