Я сделал это для RibbonToggleButtons, но, возможно, то же самое и для обычных ToggleButtons.
Я привязал IsChecked для каждой кнопки к значению перечисления "mode", используя EnumToBooleanConverter отсюда. Как привязать RadioButtons к перечислению? (Укажите значение перечисления для этой кнопки с помощью ConverterParameter. У вас должно быть одно значение перечисления для каждой кнопки)
Затем, чтобы предотвратить снятие отметки с кнопки, которая уже отмечена, поместите это в свой код для события Click для каждого из RibbonToggleButtons:
private void PreventUncheckRibbonToggleButtonOnClick ( object sender, RoutedEventArgs e ) {
// Prevent unchecking a checked toggle button - so that one always remains checked
// Cancel the click if you hit an already-checked button
var button = (RibbonToggleButton)sender;
if( button.IsChecked != null ) { // Not sure why checked can be null but that's fine, ignore it
bool notChecked = ( ! (bool)button.IsChecked );
if( notChecked ){ // I guess this means the click would uncheck it
button.IsChecked = true;
}
}
}