Я сделал это для RibbonToggleButtons, но, может быть, то же самое для обычных ToggleButtons.
Я связал IsChecked для каждой кнопки со значением перечисления «mode», используя EnumToBooleanConverter, отсюда Как связать RadioButtonsenum? (Укажите значение enum для этой кнопки с помощью ConverterParameter. У вас должно быть одно значение enum для каждой кнопки)
Затем, чтобы не снимать флажок с кнопки, которая уже отмечена, вставьте ее в свой коддля события 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;
}
}
}