How to get a group of toggle buttons to act like radio buttons in WinUI3?
For the example below, how to implement following UI behavior:
You can make the one of four toggle buttons checked by clicking it, and at same time uncheck the other 3 buttons.
You cannot uncheck a checked toggle button by clicking it.
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<ToggleButton x:Name="Toggle1" Content="ToggleButton"
IsEnabled="{x:Bind DisableToggle1.IsChecked.Value.Equals(x:False), Mode=OneWay}"
Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked" />
</StackPanel>
Instead of setting IsEnabled
, I'd set IsHitTestVisible
like this:
<StackPanel x:Name="ToggeButtons">
<ToggleButton
Checked="ToggleButton_Checked"
Content="1" />
<ToggleButton
Checked="ToggleButton_Checked"
Content="2" />
<ToggleButton
Checked="ToggleButton_Checked"
Content="3" />
<ToggleButton
Checked="ToggleButton_Checked"
Content="4" />
</StackPanel>
private void ToggleButton_Checked(object sender, RoutedEventArgs e)
{
if (sender is not ToggleButton checkedToggleButton)
{
return;
}
foreach (ToggleButton toggleButton in ToggeButtons.Children.OfType<ToggleButton>())
{
toggleButton.IsChecked = toggleButton == checkedToggleButton;
toggleButton.IsHitTestVisible = toggleButton != checkedToggleButton;
}
}