From 9ca156d6a6b83d952badd8faee80e1291c0e3430 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Fri, 27 Jan 2023 00:00:36 +0800 Subject: [PATCH] fix: fix RadioButton empty GroupName behavior. --- src/Avalonia.Controls/RadioButton.cs | 2 +- .../RadioButtonTests.cs | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/RadioButton.cs b/src/Avalonia.Controls/RadioButton.cs index 68da24d79f..b87be34a9d 100644 --- a/src/Avalonia.Controls/RadioButton.cs +++ b/src/Avalonia.Controls/RadioButton.cs @@ -180,7 +180,7 @@ namespace Avalonia.Controls var siblings = parent .GetVisualChildren() .OfType() - .Where(x => x != this); + .Where(x => x != this && string.IsNullOrEmpty(x.GroupName)); foreach (var sibling in siblings) { diff --git a/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs b/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs index 7c5249b2c4..d5e6f4885e 100644 --- a/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs +++ b/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs @@ -70,5 +70,44 @@ namespace Avalonia.Controls.UnitTests Assert.False(radioButton2.IsChecked); Assert.True(radioButton3.IsChecked); } + + [Fact] + public void RadioButton_Empty_GroupName_Not_Influence_Other_Groups() + { + var parent = new Panel(); + + var radioButton1 = new RadioButton(); + radioButton1.GroupName = "A"; + radioButton1.IsChecked = true; + var radioButton2 = new RadioButton(); + radioButton2.GroupName = "A"; + radioButton2.IsChecked = false; + + var radioButton3 = new RadioButton(); + radioButton3.GroupName = null; + radioButton3.IsChecked = false; + var radioButton4 = new RadioButton(); + radioButton4.GroupName = null; + radioButton4.IsChecked = true; + + parent.Children.Add(radioButton1); + parent.Children.Add(radioButton2); + parent.Children.Add(radioButton3); + parent.Children.Add(radioButton4); + + Assert.True(radioButton1.IsChecked); + Assert.False(radioButton2.IsChecked); + Assert.False(radioButton3.IsChecked); + Assert.True(radioButton4.IsChecked); + + radioButton3.IsChecked = true; + + Assert.True(radioButton1.IsChecked); + Assert.False(radioButton2.IsChecked); + Assert.True(radioButton3.IsChecked); + Assert.False(radioButton4.IsChecked); + + + } } }