diff --git a/src/MaterialDesignThemes.Wpf/ColorPicker.cs b/src/MaterialDesignThemes.Wpf/ColorPicker.cs index 2af30be089..21c2dad05b 100644 --- a/src/MaterialDesignThemes.Wpf/ColorPicker.cs +++ b/src/MaterialDesignThemes.Wpf/ColorPicker.cs @@ -33,19 +33,19 @@ public Color Color private static void ColorPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { var colorPicker = (ColorPicker)d; - if (colorPicker._inCallback) + + if (!colorPicker._inCallback) { - return; + colorPicker._inCallback = true; + colorPicker.SetCurrentValue(HsbProperty, ((Color)e.NewValue).ToHsb()); + colorPicker._inCallback = false; } - colorPicker._inCallback = true; - colorPicker.SetCurrentValue(HsbProperty, ((Color)e.NewValue).ToHsb()); var args = new RoutedPropertyChangedEventArgs( (Color)e.OldValue, (Color)e.NewValue) { RoutedEvent = ColorChangedEvent }; colorPicker.RaiseEvent(args); - colorPicker._inCallback = false; } public static readonly RoutedEvent ColorChangedEvent = diff --git a/tests/MaterialDesignThemes.Wpf.Tests/ColorPickerTests.cs b/tests/MaterialDesignThemes.Wpf.Tests/ColorPickerTests.cs index 0a7285eacd..3755320975 100644 --- a/tests/MaterialDesignThemes.Wpf.Tests/ColorPickerTests.cs +++ b/tests/MaterialDesignThemes.Wpf.Tests/ColorPickerTests.cs @@ -103,6 +103,28 @@ public async Task SettingTheColorRaisesColorChangedEvent() await Assert.That(wasRaised).IsTrue(); } + [Test] + public async Task ColorChangedShouldFireWhenColorIsChangedThroughHsb() + { + var colorPicker = new ColorPicker(); + + var called = false; + Color receivedColor = default; + + colorPicker.ColorChanged += (_, args) => + { + called = true; + receivedColor = args.NewValue; + }; + + colorPicker.SetCurrentValue( + ColorPicker.HsbProperty, + new Hsb(120, 1, 1)); + + await Assert.That(called).IsTrue(); + await Assert.That(receivedColor).IsEqualTo(Colors.Lime); + } + [Test] public async Task DraggingTheHueSliderChangesHue() {