Files
ShrlAlgoToolkit/WPFluent/Controls/ProgressRing/ProgressRing.xaml
ShrlAlgo 4d35cadb56 更新
2025-07-11 09:20:23 +08:00

98 lines
5.8 KiB
XML

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:controls="clr-namespace:WPFluent.Controls"
xmlns:converters="clr-namespace:WPFluent.Converters"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<converters:ProgressThicknessConverter x:Key="ProgressThicknessConverter" />
<Style TargetType="{x:Type controls:ProgressRing}">
<Setter Property="Height" Value="60" />
<Setter Property="Width" Value="60" />
<Setter Property="Focusable" Value="False" />
<Setter Property="Foreground" Value="{DynamicResource SystemFillColorAttentionBrush}" />
<Setter Property="CoverRingStroke" Value="{DynamicResource ControlFillColorTransparentBrush}" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:ProgressRing}">
<Grid Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
<controls:Arc
EndAngle="359"
StartAngle="0"
Stroke="{TemplateBinding CoverRingStroke}"
StrokeThickness="{Binding Path=Height, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, Converter={StaticResource ProgressThicknessConverter}}"
Visibility="{TemplateBinding CoverRingVisibility}" />
<controls:Arc
EndAngle="{TemplateBinding EngAngle}"
StartAngle="0"
Stroke="{TemplateBinding Foreground}"
StrokeThickness="{Binding Path=Height, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, Converter={StaticResource ProgressThicknessConverter}}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsIndeterminate" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:ProgressRing}">
<Grid Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
<controls:Arc
EndAngle="359"
StartAngle="0"
Stroke="{TemplateBinding CoverRingStroke}"
StrokeThickness="{Binding Path=Height, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, Converter={StaticResource ProgressThicknessConverter}}"
Visibility="{TemplateBinding CoverRingVisibility}" />
<controls:Arc
EndAngle="{TemplateBinding IndeterminateAngle}"
RenderTransformOrigin="0.5, 0.5"
StartAngle="0"
Stroke="{TemplateBinding Foreground}"
StrokeThickness="{Binding Path=Height, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, Converter={StaticResource ProgressThicknessConverter}}"
x:Name="Arc">
<controls:Arc.RenderTransform>
<RotateTransform />
</controls:Arc.RenderTransform>
</controls:Arc>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:2"
RepeatBehavior="Forever"
Storyboard.TargetName="Arc"
Storyboard.TargetProperty="(Canvas.RenderTransform).(RotateTransform.Angle)"
To="360" />
<DoubleAnimation
AutoReverse="True"
Duration="0:0:5"
From="100"
RepeatBehavior="Forever"
Storyboard.TargetName="Arc"
Storyboard.TargetProperty="EndAngle"
To="320" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard />
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>