diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_Checking_Default_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_Checking_Default_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..7b347219b7ac
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_Checking_Default_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..7cf311715f76
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_FlowDirectionAndContent_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_FlowDirectionAndContent_VerifyVisualState.png
new file mode 100644
index 000000000000..0204567f86c6
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_FlowDirectionAndContent_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png
new file mode 100644
index 000000000000..fca4c05e893e
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..3211ef3a01f6
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..ad0adc862045
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..f9b1ab0ca841
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetContentAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..4f05c29b4639
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..f44b4f510ea8
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..749bfa6f47f1
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..706129dfbf39
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
index ae058bc9bc44..3ca199e661c7 100644
--- a/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
+++ b/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
@@ -67,6 +67,7 @@ public override string ToString()
new GalleryPageFactory(() => new ListViewCoreGalleryPage(), "ListView Gallery"),
new GalleryPageFactory(() => new PickerCoreGalleryPage(), "Picker Gallery"),
new GalleryPageFactory(() => new ProgressBarCoreGalleryPage(), "Progress Bar Gallery"),
+ new GalleryPageFactory(() => new RadioButtonControlPage(), "RadioButton Feature Matrix"),
new GalleryPageFactory(() => new RadioButtonCoreGalleryPage(), "RadioButton Gallery"),
new GalleryPageFactory(() => new ScrollViewCoreGalleryPage(), "ScrollView Gallery"),
new GalleryPageFactory(() => new SearchBarCoreGalleryPage(), "Search Bar Gallery"),
@@ -79,7 +80,6 @@ public override string ToString()
new GalleryPageFactory(() => new SliderControlPage(), "Slider Feature Matrix"),
new GalleryPageFactory(() => new CollectionViewFeaturePage(), "CollectionView Feature Matrix"),
new GalleryPageFactory(() => new CarouselViewFeaturePage(), "CarouselView Feature Matrix"),
-
};
public CorePageView(Page rootPage)
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonControlPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonControlPage.xaml
new file mode 100644
index 000000000000..720e45d417ad
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonControlPage.xaml
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonControlPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonControlPage.xaml.cs
new file mode 100644
index 000000000000..4abda43f23e5
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonControlPage.xaml.cs
@@ -0,0 +1,52 @@
+using System;
+using Microsoft.Maui.Controls;
+
+namespace Maui.Controls.Sample;
+
+public class RadioButtonControlPage : NavigationPage
+{
+ public RadioButtonControlPage()
+ {
+ PushAsync(new RadioButtonControlMainPage());
+ }
+}
+
+public partial class RadioButtonControlMainPage : ContentPage
+{
+ private RadioButtonViewModel _viewModel;
+
+ public RadioButtonControlMainPage()
+ {
+ InitializeComponent();
+ _viewModel = new RadioButtonViewModel();
+ BindingContext = _viewModel;
+ }
+
+ private async void NavigateToOptionsPage_Clicked(object sender, EventArgs e)
+ {
+ BindingContext = _viewModel = new RadioButtonViewModel();
+ RadioButtonControlTwo.IsChecked = false;
+ RadioButtonControlThree.IsChecked = false;
+ RadioButtonControlFour.IsChecked = false;
+ RadioButtonControlFive.IsChecked = false;
+ SelectedValueLabelOne.Text = string.Empty;
+ SelectedValueLabelTwo.Text = string.Empty;
+ await Navigation.PushAsync(new RadioButtonOptionsPage(_viewModel));
+ }
+
+ private void RadioButton_CheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (e.Value)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.GroupName == "Theme")
+ {
+ SelectedValueLabelOne.Text = radioButton.Content.ToString();
+ }
+ else
+ {
+ SelectedValueLabelTwo.Text = radioButton.Content.ToString();
+ }
+ }
+ }
+}
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonOptionsPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonOptionsPage.xaml
new file mode 100644
index 000000000000..8723f3bfb67f
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonOptionsPage.xaml
@@ -0,0 +1,370 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonOptionsPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonOptionsPage.xaml.cs
new file mode 100644
index 000000000000..3230d5d97f68
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonOptionsPage.xaml.cs
@@ -0,0 +1,236 @@
+using System;
+using Microsoft.Maui.Controls;
+
+namespace Maui.Controls.Sample;
+
+public partial class RadioButtonOptionsPage : ContentPage
+{
+ private RadioButtonViewModel _viewModel;
+
+ public RadioButtonOptionsPage(RadioButtonViewModel viewModel)
+ {
+ InitializeComponent();
+ _viewModel = viewModel;
+ BindingContext = _viewModel;
+ }
+
+ private void ApplyButton_Clicked(object sender, EventArgs e)
+ {
+ Navigation.PopAsync();
+ }
+
+ private void OnContentChanged(object sender, TextChangedEventArgs e)
+ {
+ if (!string.IsNullOrEmpty(ContentEntry.Text))
+ {
+ _viewModel.Content = ContentEntry.Text;
+ }
+ }
+
+ private void ViewContentButton_Clicked(object sender, EventArgs e)
+ {
+ _viewModel.Content = new Label
+ {
+ Text = "App Theme Selection",
+ FontSize = 14,
+ TextColor = Colors.Black,
+ BackgroundColor = Colors.SkyBlue
+ };
+ }
+
+ private void OnIsVisibleChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ _viewModel.IsVisible = radioButton.Content.ToString() == "True";
+ }
+ }
+
+ private void OnIsEnabledChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ _viewModel.IsEnabled = radioButton.Content.ToString() == "True";
+ }
+ }
+
+ private void OnFlowDirectionChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ _viewModel.FlowDirection = radioButton.Content.ToString() == "Left to Right" ? FlowDirection.LeftToRight : FlowDirection.RightToLeft;
+ }
+ }
+
+
+
+ private void OnIsCheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ _viewModel.IsChecked = radioButton.Content.ToString() == "True";
+ }
+ }
+
+ private void OnGroupNameChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ _viewModel.GroupName = radioButton.Content.ToString();
+ }
+ }
+
+ private void OnValueChanged(object sender, TextChangedEventArgs e)
+ {
+ if (!string.IsNullOrEmpty(ValueEntry.Text))
+ {
+ _viewModel.Value = ValueEntry.Text;
+ }
+ }
+
+ private void BorderColorButton_Clicked(object sender, EventArgs e)
+ {
+ var button = (Button)sender;
+ switch (button.Text)
+ {
+ case "Green":
+ _viewModel.BorderColor = Colors.Green;
+ break;
+ case "Purple":
+ _viewModel.BorderColor = Colors.Purple;
+ break;
+ default:
+ _viewModel.BorderColor = Color.FromRgba(1, 122, 255, 255);
+ break;
+ }
+ }
+
+ private void OnBorderWidthChanged(object sender, TextChangedEventArgs e)
+ {
+ if (double.TryParse(BorderWidthEntry.Text, out double width))
+ {
+ _viewModel.BorderWidth = width;
+ }
+ }
+
+ private void OnCharacterSpacingChanged(object sender, TextChangedEventArgs e)
+ {
+ if (double.TryParse(CharacterSpacingEntry.Text, out double spacing))
+ {
+ _viewModel.CharacterSpacing = spacing;
+ }
+ }
+
+ private void OnCornerRadiusChanged(object sender, TextChangedEventArgs e)
+ {
+ if (int.TryParse(CornerRadiusEntry.Text, out int radius))
+ {
+ _viewModel.CornerRadius = radius;
+ }
+ }
+
+ private void OnFontAttributesChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ switch (radioButton.Content.ToString())
+ {
+ case "Bold":
+ _viewModel.FontAttributes = FontAttributes.Bold;
+ break;
+ case "Italic":
+ _viewModel.FontAttributes = FontAttributes.Italic;
+ break;
+ default:
+ _viewModel.FontAttributes = FontAttributes.None;
+ break;
+ }
+ }
+ }
+
+ private void OnFontAutoScalingChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ _viewModel.FontAutoScalingEnabled = radioButton.Content.ToString() == "True";
+ }
+ }
+
+ private void OnFontFamilyChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ switch (radioButton.Content.ToString())
+ {
+ case "Dokdo":
+ _viewModel.FontFamily = "Dokdo";
+ break;
+ case "MontserratBold":
+ _viewModel.FontFamily = "MontserratBold";
+ break;
+ }
+ }
+ }
+
+ private void OnFontSizeChanged(object sender, TextChangedEventArgs e)
+ {
+ if (double.TryParse(FontSizeEntry.Text, out double size))
+ {
+ _viewModel.FontSize = size;
+ }
+ }
+
+ private void TextColorButton_Clicked(object sender, EventArgs e)
+ {
+ var button = (Button)sender;
+ switch (button.Text)
+ {
+ case "Red":
+ _viewModel.TextColor = Colors.Red;
+ break;
+ case "Blue":
+ _viewModel.TextColor = Colors.Blue;
+ break;
+ default:
+ _viewModel.TextColor = Colors.Black;
+ break;
+ }
+ }
+
+ private void OnTextTransformChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ switch (radioButton.Content.ToString())
+ {
+ case "Upper":
+ _viewModel.TextTransform = TextTransform.Uppercase;
+ break;
+ case "Lower":
+ _viewModel.TextTransform = TextTransform.Lowercase;
+ break;
+ default:
+ _viewModel.TextTransform = TextTransform.None;
+ break;
+ }
+ }
+ }
+
+ private void OnSelectedRadioButton_CheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ var radioButton = sender as RadioButton;
+ if (radioButton != null && radioButton.IsChecked)
+ {
+ _viewModel.SelectedValue = radioButton.Content.ToString();
+ }
+ }
+}
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonViewModel.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonViewModel.cs
new file mode 100644
index 000000000000..30426d521c64
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/RadioButton/RadioButtonViewModel.cs
@@ -0,0 +1,268 @@
+using System;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using Microsoft.Maui.Controls;
+
+namespace Maui.Controls.Sample;
+
+public class RadioButtonViewModel : INotifyPropertyChanged
+{
+ private Color _borderColor = Colors.Transparent;
+ private double _borderWidth = -1d;
+ private double _characterSpacing = 0.0d;
+ private object _content = "Dark Mode";
+ private int _cornerRadius = -1;
+ private FlowDirection _flowDirection = FlowDirection.LeftToRight;
+ private FontAttributes _fontAttributes = FontAttributes.None;
+ private bool _fontAutoScalingEnabled = true;
+ private string _fontFamily = null;
+ private double _fontSize = 14d;
+ private string _groupName = "Theme";
+ private bool _isChecked = false;
+ private bool _isEnabled = true;
+ private bool _isVisible = true;
+ private Color _textColor = Colors.Black;
+ private TextTransform _textTransform = TextTransform.Default;
+ private object _selectedValue = null;
+ private object _value = "One";
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public Color BorderColor
+ {
+ get => _borderColor;
+ set
+ {
+ if (_borderColor != value)
+ {
+ _borderColor = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public double BorderWidth
+ {
+ get => _borderWidth;
+ set
+ {
+ if (_borderWidth != value)
+ {
+ _borderWidth = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public double CharacterSpacing
+ {
+ get => _characterSpacing;
+ set
+ {
+ if (_characterSpacing != value)
+ {
+ _characterSpacing = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public object Content
+ {
+ get => _content;
+ set
+ {
+ if (_content != value)
+ {
+ _content = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public int CornerRadius
+ {
+ get => _cornerRadius;
+ set
+ {
+ if (_cornerRadius != value)
+ {
+ _cornerRadius = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public FlowDirection FlowDirection
+ {
+ get => _flowDirection;
+ set
+ {
+ if (_flowDirection != value)
+ {
+ _flowDirection = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public FontAttributes FontAttributes
+ {
+ get => _fontAttributes;
+ set
+ {
+ if (_fontAttributes != value)
+ {
+ _fontAttributes = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public bool FontAutoScalingEnabled
+ {
+ get => _fontAutoScalingEnabled;
+ set
+ {
+ if (_fontAutoScalingEnabled != value)
+ {
+ _fontAutoScalingEnabled = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public string FontFamily
+ {
+ get => _fontFamily;
+ set
+ {
+ if (_fontFamily != value)
+ {
+ _fontFamily = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public double FontSize
+ {
+ get => _fontSize;
+ set
+ {
+ if (_fontSize != value)
+ {
+ _fontSize = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public string GroupName
+ {
+ get => _groupName;
+ set
+ {
+ if (_groupName != value)
+ {
+ _groupName = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public bool IsChecked
+ {
+ get => _isChecked;
+ set
+ {
+ if (_isChecked != value)
+ {
+ _isChecked = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public bool IsEnabled
+ {
+ get => _isEnabled;
+ set
+ {
+ if (_isEnabled != value)
+ {
+ _isEnabled = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public bool IsVisible
+ {
+ get => _isVisible;
+ set
+ {
+ if (_isVisible != value)
+ {
+ _isVisible = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public Color TextColor
+ {
+ get => _textColor;
+ set
+ {
+ if (_textColor != value)
+ {
+ _textColor = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public TextTransform TextTransform
+ {
+ get => _textTransform;
+ set
+ {
+ if (_textTransform != value)
+ {
+ _textTransform = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+ public object Value
+ {
+ get => _value;
+ set
+ {
+ if (_value != value)
+ {
+ _value = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ public object SelectedValue
+ {
+ get => _selectedValue;
+ set
+ {
+ if (_selectedValue != value)
+ {
+ _selectedValue = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_Checking_Default_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_Checking_Default_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..22831415012f
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_Checking_Default_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..348791cc6f4a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_FlowDirectionAndContent_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_FlowDirectionAndContent_VerifyVisualState.png
new file mode 100644
index 000000000000..651aef307ee2
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_FlowDirectionAndContent_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetBorderWidthAndCornerRadius_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetBorderWidthAndCornerRadius_VerifyVisualState.png
new file mode 100644
index 000000000000..f6a3ea5acafa
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetBorderWidthAndCornerRadius_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png
new file mode 100644
index 000000000000..c1b8e9b081c4
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..5ca6405f73a4
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..5447b082d290
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..749f6b087963
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndTextTransform.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndTextTransform.png
new file mode 100644
index 000000000000..7d25f04b4b16
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentAndTextTransform.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentWithView.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentWithView.png
new file mode 100644
index 000000000000..5743285e98e7
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetContentWithView.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..005ab88faeb7
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..28c6da97bcb8
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..ea365e0a806f
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndTextTransform_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndTextTransform_VerifyVisualState.png
new file mode 100644
index 000000000000..5da88b03204c
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontFamilyAndTextTransform_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..e002e5c891f4
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetTextColorAndBorderColor_VerifyVisualState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetTextColorAndBorderColor_VerifyVisualState.png
new file mode 100644
index 000000000000..249d23ab275f
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/RadioButton_SetTextColorAndBorderColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/RadioButtonFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/RadioButtonFeatureTests.cs
new file mode 100644
index 000000000000..d8ca6f5c6c48
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/RadioButtonFeatureTests.cs
@@ -0,0 +1,394 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+public class RadioButtonFeatureTests : UITest
+{
+ public const string RadioButtonFeatureMatrix = "RadioButton Feature Matrix";
+
+ public RadioButtonFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+
+ protected override void FixtureSetup()
+ {
+ base.FixtureSetup();
+ App.NavigateToGallery(RadioButtonFeatureMatrix);
+ }
+
+ [Test, Order(1)]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_Checking_Default_Configuration_VerifyVisualState()
+ {
+ App.WaitForElement("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_Checking_Initial_Configuration_VerifyVisualState()
+ {
+ App.WaitForElement("RadioButtonControlOne");
+ App.Tap("RadioButtonControlOne");
+ App.WaitForElement("SelectedValueLabelOne");
+ Assert.That(App.WaitForElement("SelectedValueLabelOne").GetText(), Is.EqualTo("Dark Mode"));
+ App.WaitForElement("RadioButtonControlFour");
+ App.Tap("RadioButtonControlFour");
+ App.WaitForElement("SelectedValueLabelTwo");
+ Assert.That(App.WaitForElement("SelectedValueLabelTwo").GetText(), Is.EqualTo("All Notifications"));
+ VerifyScreenshot();
+ }
+
+#if TEST_FAILS_ON_WINDOWS && TEST_FAILS_ON_ANDROID // This test fails on Windows and Android because the RadioButton control does not update the BorderColor at runtime. Issue Link - https://github.com/dotnet/maui/issues/15806
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetTextColorAndBorderColor_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextColorRedButton");
+ App.Tap("TextColorRedButton");
+ App.WaitForElement("BorderColorPurpleButton");
+ App.Tap("BorderColorPurpleButton");
+ App.WaitForElement("BorderWidthEntry");
+ App.ClearText("BorderWidthEntry");
+ App.EnterText("BorderWidthEntry", "2");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetFontAttributesAndTextColor_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontAttributesBold");
+ App.Tap("FontAttributesBold");
+ App.WaitForElement("TextColorBlueButton");
+ App.Tap("TextColorBlueButton");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetFontFamilyAndFontSize_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontFamilyMontserratBold");
+ App.Tap("FontFamilyMontserratBold");
+ App.WaitForElement("FontSizeEntry");
+ App.ClearText("FontSizeEntry");
+ App.EnterText("FontSizeEntry", "24");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+#if TEST_FAILS_ON_WINDOWS && TEST_FAILS_ON_ANDROID // This test fails on Windows and Android because the RadioButton control does not update the BorderColor at runtime. Issue Link - https://github.com/dotnet/maui/issues/15806
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetBorderWidthAndCornerRadius_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("BorderWidthEntry");
+ App.ClearText("BorderWidthEntry");
+ App.EnterText("BorderWidthEntry", "4");
+ App.PressEnter();
+ App.WaitForElement("BorderColorGreenButton");
+ App.Tap("BorderColorGreenButton");
+ App.WaitForElement("CornerRadiusEntry");
+ App.ClearText("CornerRadiusEntry");
+ App.EnterText("CornerRadiusEntry", "12");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+#endif
+
+#if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_WINDOWS // This test fails on Android and Windows because the text transform is not applied correctly. Issue Link - https://github.com/dotnet/maui/issues/29729
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetFontFamilyAndTextTransform_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontFamilyMontserratBold");
+ App.Tap("FontFamilyMontserratBold");
+ App.WaitForElement("TextTransformUpper");
+ App.Tap("TextTransformUpper");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+#endif
+
+#if TEST_FAILS_ON_ANDROID // On Android, the View object is not supported, so it falls back to a string representation of the object. https://learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/radiobutton?view=net-maui-9.0#create-radiobuttons
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetContentWithView()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ViewContentButton");
+ App.Tap("ViewContentButton");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetContentAndTextColor_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "Colored Text");
+ App.PressEnter();
+ App.WaitForElement("TextColorBlueButton");
+ App.Tap("TextColorBlueButton");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+#if TEST_FAILS_ON_WINDOWS // This test fails on Windows because the character spacing is not applied correctly.
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetContentAndCharacterSpacing_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "Spaced Text");
+ App.PressEnter();
+ App.WaitForElement("CharacterSpacingEntry");
+ App.ClearText("CharacterSpacingEntry");
+ App.EnterText("CharacterSpacingEntry", "10");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetContentAndFontSize_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "Large Text");
+ App.PressEnter();
+ App.WaitForElement("FontSizeEntry");
+ App.ClearText("FontSizeEntry");
+ App.EnterText("FontSizeEntry", "24");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetContentAndFontAttributes_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "Bold Option");
+ App.PressEnter();
+ App.WaitForElement("FontAttributesBold");
+ App.Tap("FontAttributesBold");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+#if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_WINDOWS // This test fails on Android and Windows because the text transform is not applied correctly. Issue Link - https://github.com/dotnet/maui/issues/29729
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetContentAndTextTransform()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "transform this");
+ App.PressEnter();
+ App.WaitForElement("TextTransformUpper");
+ App.Tap("TextTransformUpper");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ VerifyScreenshot();
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontFamilyMontserratBold");
+ App.Tap("FontFamilyMontserratBold");
+ App.WaitForElement("FontAttributesBold");
+ App.Tap("FontAttributesBold");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontSizeEntry");
+ App.ClearText("FontSizeEntry");
+ App.EnterText("FontSizeEntry", "24");
+ App.PressEnter();
+ App.WaitForElement("FontAttributesItalic");
+ App.Tap("FontAttributesItalic");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_IsVisibleAndContent_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("IsVisibleFalseRadio");
+ App.Tap("IsVisibleFalseRadio");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "Visible Option");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForNoElement("RadioButtonControlOne");
+ }
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_IsEnabledAndContent_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("IsEnabledFalseRadio");
+ App.Tap("IsEnabledFalseRadio");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "Is Enabled False");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+
+ App.WaitForElement("RadioButtonControlOne");
+ App.Tap("RadioButtonControlOne");
+ App.WaitForElement("SelectedValueLabelOne");
+ Assert.That(App.WaitForElement("SelectedValueLabelOne").GetText(), Is.EqualTo(string.Empty));
+
+ App.WaitForElement("RadioButtonControlTwo");
+ App.Tap("RadioButtonControlTwo");
+ App.WaitForElement("SelectedValueLabelOne");
+ Assert.That(App.WaitForElement("SelectedValueLabelOne").GetText(), Is.EqualTo(string.Empty));
+
+ App.WaitForElement("RadioButtonControlThree");
+ App.Tap("RadioButtonControlThree");
+ App.WaitForElement("SelectedValueLabelOne");
+ Assert.That(App.WaitForElement("SelectedValueLabelOne").GetText(), Is.EqualTo(string.Empty));
+ }
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_FlowDirectionAndContent_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("ContentEntry");
+ App.ClearText("ContentEntry");
+ App.EnterText("ContentEntry", "Right to Left Option");
+ App.PressEnter();
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetGroupAndContent_VerifyVisualState()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("GroupNameTwoRadio");
+ App.Tap("GroupNameTwoRadio");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+
+ App.WaitForElement("RadioButtonControlOne");
+ App.Tap("RadioButtonControlOne");
+ Assert.That(App.WaitForElement("SelectedValueLabelTwo").GetText(), Is.EqualTo("Dark Mode"));
+
+ App.WaitForElement("RadioButtonControlFour");
+ App.Tap("RadioButtonControlFour");
+ Assert.That(App.WaitForElement("SelectedValueLabelTwo").GetText(), Is.EqualTo("All Notifications"));
+
+ App.WaitForElement("RadioButtonControlFive");
+ App.Tap("RadioButtonControlFive");
+ Assert.That(App.WaitForElement("SelectedValueLabelTwo").GetText(), Is.EqualTo("Important Only"));
+ }
+
+ [Test]
+ [Category(UITestCategories.RadioButton)]
+ public void RadioButton_SetSelectedValueAndContent()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("SelectedValueRadioButtonTwo");
+ App.Tap("SelectedValueRadioButtonTwo");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElementTillPageNavigationSettled("RadioButtonControlOne");
+ Assert.That(App.WaitForElement("SelectedValueLabelOne").GetText(), Is.EqualTo("Light Mode"));
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_Checking_Default_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_Checking_Default_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..9443cd1e270c
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_Checking_Default_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..880f948b0c46
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_FlowDirectionAndContent_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_FlowDirectionAndContent_VerifyVisualState.png
new file mode 100644
index 000000000000..700f75a9829b
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_FlowDirectionAndContent_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..b975a5377c58
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..73e8c26f2084
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..d161f227508e
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentWithView.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentWithView.png
new file mode 100644
index 000000000000..b67951bcac4a
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetContentWithView.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..090f5d1688dc
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..10990b7d4cd5
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..31ab192a63fd
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..e51cf37afc03
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_Checking_Default_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_Checking_Default_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..c340c3cc5ccb
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_Checking_Default_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png
new file mode 100644
index 000000000000..9961b2289825
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_Checking_Initial_Configuration_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_FlowDirectionAndContent_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_FlowDirectionAndContent_VerifyVisualState.png
new file mode 100644
index 000000000000..606049eb6f09
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_FlowDirectionAndContent_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetBorderWidthAndCornerRadius_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetBorderWidthAndCornerRadius_VerifyVisualState.png
new file mode 100644
index 000000000000..40c2b1639099
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetBorderWidthAndCornerRadius_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png
new file mode 100644
index 000000000000..91eaac0607d0
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndCharacterSpacing_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..98a5e777cb36
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..026650ada2f9
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..bcd16724dc84
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndTextTransform.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndTextTransform.png
new file mode 100644
index 000000000000..80ba4f3eaf52
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentAndTextTransform.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentWithView.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentWithView.png
new file mode 100644
index 000000000000..fcfdc76121f7
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetContentWithView.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png
new file mode 100644
index 000000000000..52592ab5b2a5
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontAttributesAndTextColor_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..8508dba72d04
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png
new file mode 100644
index 000000000000..b7f5ad699d3c
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndFontSize_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndTextTransform_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndTextTransform_VerifyVisualState.png
new file mode 100644
index 000000000000..18c20b9a10cc
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontFamilyAndTextTransform_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png
new file mode 100644
index 000000000000..d2a948e26811
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetFontSizeAndFontAttributes_VerifyVisualState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetTextColorAndBorderColor_VerifyVisualState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetTextColorAndBorderColor_VerifyVisualState.png
new file mode 100644
index 000000000000..59d38e9ce157
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/RadioButton_SetTextColorAndBorderColor_VerifyVisualState.png differ