Siticone Material Radio Button
The SiticoneMaterialRadioButton is a modern selection control that adheres to Material Design principles.
Unlike standard radio buttons, it features fluid ripple animations, customizable styling (Filled vs. Outlined), and group management logic that works across parent containers.
Visual Styles
Choose between two distinct rendering modes for the radio button indicator.
| Property | Type | Description |
|---|---|---|
Style |
RadioButtonStyle |
|
DotSizeRatio |
float | Controls the size of the inner dot relative to the button size (0.1 to 0.9). Allows fine-tuning the "weight" of the selection indicator. |
Grouping & Logic
The control includes advanced logic to handle mutually exclusive selection.
| Property | Type | Description |
|---|---|---|
GroupName |
string |
Assigns the button to a logical group. Radio buttons with the same GroupName will behave as a single exclusive set, even if they are in different parent containers.
|
Checked |
bool |
Gets or sets the selection state. Setting this to true automatically unchecks other buttons in the same group.
|
Colors & Appearance
Customize the color palette for every interaction state.
| Property | Type | Description |
|---|---|---|
ActiveRadioColor |
Color | The primary color when the radio button is checked. |
IdleRadioBorderColor |
Color | The border color when the radio button is unchecked. |
CheckMarkColor |
Color | The color of the inner dot/checkmark (typically White for Filled style). |
DisabledColor |
Color | The color used when Enabled = false. |
ReadOnlyColor |
Color | The color used when ReadOnly = true. |
Animation & Effects
Material Design ripple effects and smooth transitions.
| Property | Type | Description |
|---|---|---|
EnableRippleEffect |
bool | Enables the expanding circular animation on click. |
CheckingRippleColor |
Color | The ripple color when selecting the button. |
RippleSizeMultiplier |
int | How large the ripple expands relative to the button size (e.g., 2x). |
AnimationDuration |
int | Duration of the check/uncheck animation in milliseconds. |
Events
Rich event system for tracking state changes.
// Fired when the Checked state changes.
radioBtn.CheckedChanged += (s, e) =>
{
if (radioBtn.Checked)
{
ApplyOption(radioBtn.Text);
}
};
// Provides detailed information about the change event.
radioBtn.StateChanged += (s, e) =>
{
Console.WriteLine($"Group: {e.GroupName}, Old: {e.OldState}, New: {e.NewState}");
};
Designer Support
Includes a Smart Tag menu with presets for rapid styling.
| Category | Features |
|---|---|
Themes |
Presets like Light, Dark, Material Blue, Green, Red, Purple. |
Styles |
Quickly switch between Filled and Outlined styles. |
Dot Size |
Presets for Small, Medium, and Large indicator dots. |
Usage Examples
Example 1: Gender Selection (Filled Style)
Standard use case with mutually exclusive options.
private void SetupGenderRadios()
{
string group = "Gender";
rbMale.GroupName = group;
rbMale.Text = "Male";
rbMale.Style = RadioButtonStyle.Filled;
rbMale.ActiveRadioColor = Color.DodgerBlue;
rbFemale.GroupName = group;
rbFemale.Text = "Female";
rbFemale.Style = RadioButtonStyle.Filled;
rbFemale.ActiveRadioColor = Color.HotPink;
rbOther.GroupName = group;
rbOther.Text = "Other";
// ... configure style
}
Example 2: Theme Selection (Outlined Style)
Using the outlined style for a cleaner look in a settings menu.
private void SetupThemeOptions()
{
rbLight.GroupName = "AppTheme";
rbLight.Style = RadioButtonStyle.Outlined;
rbLight.ActiveRadioColor = Color.Black; // Dark border when selected
rbLight.CheckMarkColor = Color.Black; // Dark dot
rbDark.GroupName = "AppTheme";
rbDark.Style = RadioButtonStyle.Outlined;
rbDark.ActiveRadioColor = Color.White;
rbDark.CheckMarkColor = Color.White;
}
Example 3: Read-Only Configuration
Displaying a selected option that cannot be changed by the user.
private void ShowCurrentPlan(string plan)
{
rbFree.IsReadOnly = true;
rbPro.IsReadOnly = true;
if (plan == "Pro") rbPro.Checked = true;
else rbFree.Checked = true;
// Optional: Enable shake feedback
rbFree.CanShake = true;
rbPro.CanShake = true;
}