diff --git a/src/Ursa/Controls/EnumSelector/EnumSelector.cs b/src/Ursa/Controls/EnumSelector/EnumSelector.cs index eebbd5e..4585fb5 100644 --- a/src/Ursa/Controls/EnumSelector/EnumSelector.cs +++ b/src/Ursa/Controls/EnumSelector/EnumSelector.cs @@ -34,6 +34,7 @@ public class EnumSelector: TemplatedControl private static object? OnValueCoerce(AvaloniaObject o, object? value) { if (o is not EnumSelector selector) return null; + if (!selector.IsInitialized) return value; if (value is null) return null; if (value.GetType() != selector.EnumType) return null; var first = selector.Values?.FirstOrDefault(a => Equals(a.Value, value)); @@ -128,6 +129,8 @@ public class EnumSelector: TemplatedControl return; } Values = GenerateItemTuple(); + var first = Values?.FirstOrDefault(a => Equals(a.Value, this.Value)); + SetCurrentValue(SelectedValueProperty, first); } // netstandard 2.0 does not support Enum.GetValuesAsUnderlyingType, which is used for native aot compilation diff --git a/tests/HeadlessTest.Ursa/Controls/EnumSelectorTests/InitialStateTest.cs b/tests/HeadlessTest.Ursa/Controls/EnumSelectorTests/InitialStateTest.cs new file mode 100644 index 0000000..96d1e0c --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/EnumSelectorTests/InitialStateTest.cs @@ -0,0 +1,24 @@ +using Avalonia.Controls; +using Avalonia.Headless.XUnit; +using Ursa.Controls; + +namespace HeadlessTest.Ursa.Controls.EnumSelectorTests; + +public class InitialStateTest +{ + [AvaloniaFact] + public void Initial_State_Respected() + { + var window = new Window(); + var selector = new EnumSelector() + { + Value = HorizontalPosition.Right, + EnumType = typeof(HorizontalPosition), + }; + window.Content = selector; + window.Show(); + Assert.Equal(HorizontalPosition.Right, selector.Value); + Assert.NotNull(selector.SelectedValue); + Assert.Equal(HorizontalPosition.Right, selector.SelectedValue?.Value); + } +} \ No newline at end of file