1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Tango.FSE.Common.Controls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:circularProgressBar="clr-namespace:MaterialDesignThemes.Wpf.Converters.CircularProgressBar"
xmlns:transitions="clr-namespace:MaterialDesignThemes.Wpf.Transitions"
xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters">
<Style TargetType="{x:Type local:ProgressRing}">
<Setter Property="Foreground" Value="{DynamicResource PrimaryHueMidBrush}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Width" Value="50" />
<Setter Property="Height" Value="50" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ProgressRing}">
<ControlTemplate.Resources>
<Storyboard x:Key="IsIndeterminateStoryboard" TargetName="RotateTransform" TargetProperty="Angle" RepeatBehavior="Forever">
<DoubleAnimation From="0" To="359" Duration="0:0:2" />
</Storyboard>
<Storyboard x:Key="IsFullyIndeterminateScaleStoryboard">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="FullyIndeterminateGridScaleTransform"
Storyboard.TargetProperty="ScaleX"
RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0" Value="0.0" />
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="1.0" />
<SplineDoubleKeyFrame KeyTime="0:0:4" Value="0.0" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimation Storyboard.TargetName="RotateTransform"
Storyboard.TargetProperty="Angle"
RepeatBehavior="Forever"
From="00" To="359" Duration="0:0:1.25" />
</Storyboard>
</ControlTemplate.Resources>
<Grid x:Name="TemplateRoot" ClipToBounds="False">
<Grid x:Name="FullyIndeterminateGrid">
<Grid.RenderTransform>
<ScaleTransform x:Name="FullyIndeterminateGridScaleTransform" ScaleX="0" />
</Grid.RenderTransform>
</Grid>
<Grid x:Name="PathGrid" Margin="2"/>
<Canvas>
<Path x:Name="Path" Stroke="{TemplateBinding Foreground}" StrokeThickness="{TemplateBinding Thickness}"
Canvas.Top="2" Canvas.Left="2"
RenderTransformOrigin="0, 0">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource StartPointConverter}, Mode=OneWay}">
<ArcSegment Size="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource ArcSizeConverter}, Mode=OneWay}"
SweepDirection="Clockwise">
<ArcSegment.IsLargeArc>
<MultiBinding Converter="{StaticResource LargeArcConverter}">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Minimum" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum" />
<Binding ElementName="FullyIndeterminateGridScaleTransform" Path="ScaleX" />
</MultiBinding>
</ArcSegment.IsLargeArc>
<ArcSegment.Point>
<MultiBinding Converter="{StaticResource ArcEndPointConverter}">
<Binding ElementName="PathGrid" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Minimum" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum" />
<Binding ElementName="FullyIndeterminateGridScaleTransform" Path="ScaleX" />
</MultiBinding>
</ArcSegment.Point>
</ArcSegment>
</PathFigure>
</PathGeometry>
</Path.Data>
<Path.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="RotateTransform"
CenterX="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}"
CenterY="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}" />
</TransformGroup>
</Path.RenderTransform>
</Path>
</Canvas>
</Grid>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsIndeterminate, RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding IsVisible, RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding Value, RelativeSource={RelativeSource Self}, Converter={StaticResource NotZeroConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="IsFullyIndeterminateStoryboard" />
<BeginStoryboard Storyboard="{StaticResource IsIndeterminateStoryboard}"
Name="IsIndeterminateStoryboard"/>
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="IsIndeterminateStoryboard" />
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsIndeterminate" Value="True" />
<Condition Property="Value" Value="0" />
<Condition Property="IsVisible" Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="IsIndeterminateStoryboard" />
<BeginStoryboard Storyboard="{StaticResource IsFullyIndeterminateScaleStoryboard}"
Name="IsFullyIndeterminateStoryboard"/>
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="IsFullyIndeterminateStoryboard" />
</MultiTrigger.ExitActions>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
|