<UserControl xmlns="https://github.com/avaloniaui" 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:convt="using:SPTInstaller.Converters" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="SPTInstaller.CustomControls.StatusSpinner"> <UserControl.Resources> <convt:StatusSpinnerIsStateConverter x:Key="IsStateConverter" /> <convt:StatusSpinnerIsProcessingConverter x:Key="IsInProcessingStateConverter" /> </UserControl.Resources> <UserControl.Styles> <Style Selector="Arc.running"> <Setter Property="Stroke" Value="DodgerBlue" /> </Style> <Style Selector="Path.ok"> <Setter Property="Data" Value="{StaticResource CircledCheck}" /> <Setter Property="Fill" Value="Green" /> </Style> <Style Selector="Path.warning"> <Setter Property="Data" Value="{StaticResource CircledWarn}" /> <Setter Property="Fill" Value="Goldenrod" /> </Style> <Style Selector="Path.error"> <Setter Property="Data" Value="{StaticResource CircledX}" /> <Setter Property="Fill" Value="Red" /> </Style> <Style Selector="Arc"> <Setter Property="Stroke" Value="Gray" /> <Setter Property="IsVisible" Value="{Binding State, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource ResourceKey=IsInProcessingStateConverter}}" /> <Style.Animations> <Animation Duration="0:0:1" IterationCount="Infinite"> <KeyFrame Cue="0%"> <Setter Property="RotateTransform.Angle" Value="0" /> </KeyFrame> <KeyFrame Cue="100%"> <Setter Property="RotateTransform.Angle" Value="360" /> </KeyFrame> </Animation> </Style.Animations> </Style> </UserControl.Styles> <Grid> <Canvas Margin="0 3 0 0" Height="20" Width="20" IsVisible="{Binding State, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource ResourceKey=IsInProcessingStateConverter}, ConverterParameter=invert}"> <Ellipse Fill="White" Height="15" Width="15" Canvas.Top="3" Canvas.Left="3" /> <Path StrokeThickness="2" Classes.ok="{Binding State, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource ResourceKey=IsStateConverter}, ConverterParameter=OK}" Classes.warning="{Binding State, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource ResourceKey=IsStateConverter}, ConverterParameter=Warning}" Classes.error="{Binding State, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource ResourceKey=IsStateConverter}, ConverterParameter=Error}" /> </Canvas> <Arc StartAngle="280" SweepAngle="80" Margin="0 3 0 0" StrokeThickness="3" Width="20" Height="20" VerticalAlignment="Top" Classes.running="{Binding State, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource ResourceKey=IsStateConverter}, ConverterParameter=Running}" /> </Grid> </UserControl>