diff --git a/App/KingPing/Views/AnalogOutputView.axaml b/App/KingPing/Views/AnalogOutputView.axaml
index 26cc409..cb3e3bd 100644
--- a/App/KingPing/Views/AnalogOutputView.axaml
+++ b/App/KingPing/Views/AnalogOutputView.axaml
@@ -2,8 +2,7 @@
x:Class="KingPing.AnalogOutputView"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-
-
-
-
+
+
+
diff --git a/UI/Avalonia.Controls/ProgressRing/ProgressRing.axaml b/UI/Avalonia.Controls/ProgressRing/ProgressRing.axaml
index 21c1bb0..058fb5e 100644
--- a/UI/Avalonia.Controls/ProgressRing/ProgressRing.axaml
+++ b/UI/Avalonia.Controls/ProgressRing/ProgressRing.axaml
@@ -29,10 +29,11 @@
SweepAngle="360" />
+ StrokeThickness="{DynamicResource ProgressRingStrokeThickness}"
+ SweepAngle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.SweepAngle}" />
diff --git a/UI/Avalonia.Controls/ProgressRing/ProgressRing.cs b/UI/Avalonia.Controls/ProgressRing/ProgressRing.cs
index 529a452..fae2ce5 100644
--- a/UI/Avalonia.Controls/ProgressRing/ProgressRing.cs
+++ b/UI/Avalonia.Controls/ProgressRing/ProgressRing.cs
@@ -7,7 +7,15 @@ namespace TheXamlGuy.UI.Avalonia.Controls
public class ProgressRing : RangeBase
{
public static readonly StyledProperty IsIndeterminateProperty =
- AvaloniaProperty.Register(nameof(IsIndeterminate), true);
+ AvaloniaProperty.Register(nameof(IsIndeterminate), false);
+
+ public static readonly StyledProperty TemplateSettingsProperty =
+ AvaloniaProperty.Register(nameof(TemplateSettings));
+
+ public ProgressRing()
+ {
+ SetValue(TemplateSettingsProperty, new ProgressRingTemplateSettings());
+ }
public bool IsIndeterminate
{
@@ -15,23 +23,40 @@ namespace TheXamlGuy.UI.Avalonia.Controls
set => SetValue(IsIndeterminateProperty, value);
}
+ public ProgressRingTemplateSettings TemplateSettings
+ {
+ get => GetValue(TemplateSettingsProperty);
+ set => SetValue(TemplateSettingsProperty, value);
+ }
+
protected override void OnApplyTemplate(TemplateAppliedEventArgs args)
{
UpdateIsIndeterminate();
+ UpdateValue();
+ }
+
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs args)
+ {
+ base.OnPropertyChanged(args);
+ if (args.Property == IsIndeterminateProperty)
+ {
+ UpdateIsIndeterminate();
+ }
+
+ if (args.Property == ValueProperty)
+ {
+ UpdateValue();
+ }
}
private void UpdateIsIndeterminate()
{
PseudoClasses.Set(":indeterminate", IsIndeterminate);
-
}
- protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
+
+ private void UpdateValue()
{
- base.OnPropertyChanged(change);
- if (change.Property == IsIndeterminateProperty)
- {
- UpdateIsIndeterminate();
- }
+ TemplateSettings.SetValue(ProgressRingTemplateSettings.SweepAngleProperty, Value == Maximum ? 360 : 360 * (Value / (Maximum - Minimum)));
}
}
}
diff --git a/UI/Avalonia.Controls/ProgressRing/ProgressRingTemplateSettings.cs b/UI/Avalonia.Controls/ProgressRing/ProgressRingTemplateSettings.cs
new file mode 100644
index 0000000..6d97afe
--- /dev/null
+++ b/UI/Avalonia.Controls/ProgressRing/ProgressRingTemplateSettings.cs
@@ -0,0 +1,17 @@
+using Avalonia;
+using Avalonia.Controls.Primitives;
+
+namespace TheXamlGuy.UI.Avalonia.Controls
+{
+ public class ProgressRingTemplateSettings : TemplatedControl
+ {
+ public static readonly StyledProperty SweepAngleProperty =
+ AvaloniaProperty.Register(nameof(SweepAngle), 0);
+
+ public double SweepAngle
+ {
+ get => GetValue(SweepAngleProperty);
+ set => SetValue(SweepAngleProperty, value);
+ }
+ }
+}