diff --git a/src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs b/src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs
index 3c429783d5..d04ddf4bd6 100644
--- a/src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs
+++ b/src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs
@@ -81,16 +81,26 @@ namespace Avalonia.Controls.Primitives
base.OnApplyTemplate(e);
}
+ ///
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
+ {
+ if (change.Property == HsvColorProperty)
+ {
+ OnColorChanged(new ColorChangedEventArgs(
+ change.GetOldValue().ToRgb(),
+ change.GetNewValue().ToRgb()));
+ }
+
+ base.OnPropertyChanged(change);
+ }
+
///
/// Called before the event occurs.
///
- /// The newly selected color.
- protected virtual void OnColorChanged(HsvColor newColor)
+ /// The defining old/new colors.
+ protected virtual void OnColorChanged(ColorChangedEventArgs e)
{
- var oldColor = HsvColor;
- HsvColor = newColor;
-
- ColorChanged?.Invoke(this, new ColorChangedEventArgs(oldColor.ToRgb(), newColor.ToRgb()));
+ ColorChanged?.Invoke(this, e);
}
///
@@ -111,7 +121,10 @@ namespace Avalonia.Controls.Primitives
catch { }
HsvColor newHsvColor = AccentColorConverter.GetAccent(hsvColor, accentStep);
- OnColorChanged(newHsvColor);
+ HsvColor oldHsvColor = HsvColor;
+
+ HsvColor = newHsvColor;
+ OnColorChanged(new ColorChangedEventArgs(oldHsvColor.ToRgb(), newHsvColor.ToRgb()));
}
}
}
diff --git a/src/Avalonia.Controls.ColorPicker/ColorSlider/ColorSlider.cs b/src/Avalonia.Controls.ColorPicker/ColorSlider/ColorSlider.cs
index c73f2b1cea..59fb53556a 100644
--- a/src/Avalonia.Controls.ColorPicker/ColorSlider/ColorSlider.cs
+++ b/src/Avalonia.Controls.ColorPicker/ColorSlider/ColorSlider.cs
@@ -15,6 +15,11 @@ namespace Avalonia.Controls.Primitives
protected const string pcDarkSelector = ":dark-selector";
protected const string pcLightSelector = ":light-selector";
+ ///
+ /// Event for when the selected color changes within the slider.
+ ///
+ public event EventHandler? ColorChanged;
+
private const double MaxHue = 359.99999999999999999;
private bool disableUpdates = false;
@@ -321,6 +326,10 @@ namespace Avalonia.Controls.Primitives
}
UpdatePseudoClasses();
+ OnColorChanged(new ColorChangedEventArgs(
+ change.GetOldValue(),
+ change.GetNewValue()));
+
disableUpdates = false;
}
else if (change.Property == HsvColorProperty)
@@ -336,6 +345,10 @@ namespace Avalonia.Controls.Primitives
}
UpdatePseudoClasses();
+ OnColorChanged(new ColorChangedEventArgs(
+ change.GetOldValue().ToRgb(),
+ change.GetNewValue().ToRgb()));
+
disableUpdates = false;
}
else if (change.Property == BoundsProperty)
@@ -351,6 +364,7 @@ namespace Avalonia.Controls.Primitives
{
disableUpdates = true;
+ Color oldColor = Color;
(var color, var hsvColor) = GetColorFromSliderValues();
if (ColorModel == ColorModel.Hsva)
@@ -365,10 +379,21 @@ namespace Avalonia.Controls.Primitives
}
UpdatePseudoClasses();
+ OnColorChanged(new ColorChangedEventArgs(oldColor, Color));
+
disableUpdates = false;
}
base.OnPropertyChanged(change);
}
+
+ ///
+ /// Called before the event occurs.
+ ///
+ /// The defining old/new colors.
+ protected virtual void OnColorChanged(ColorChangedEventArgs e)
+ {
+ ColorChanged?.Invoke(this, e);
+ }
}
}