У меня нет вашего кода и разметки, поэтому я сделал это в более простом виде.
При этом используется тот факт, что проверка флажка является перенаправленным пузырьковым событием.
<Grid>
<StackPanel ToggleButton.Checked="StackPanel_Checked">
<CheckBox />
<CheckBox />
<CheckBox />
<CheckBox />
</StackPanel>
</Grid>
и
private void StackPanel_Checked(object sender, RoutedEventArgs e)
{
CheckBox cb = e.OriginalSource as CheckBox;
if(cb.IsChecked == false)
{
return;
}
foreach (var item in ((StackPanel)sender).Children)
{
if(item != cb)
{
((CheckBox)item).IsChecked = false;
}
}
}
Обратите внимание, что при изменении других флажков их события будут срабатывать, но обработчик будет игнорировать те, которые сделаны ложными.
Вы также должны избегать изменения того, который пользователь только что проверил.
Я не остановил стрельбу, когда вы сняли галочку с той, которую только что проверили.
Так что вы можете подумать об этом немного дольше, чем 10 минут, которые я потратил на ответ на ваш вопрос.