Hice esto para RibbonToggleButtons, pero tal vez sea lo mismo para los ToggleButtons normales.
Vinculé el IsChecked para cada botón a un valor de enumeración de "modo" usando EnumToBooleanConverter desde aquí ¿Cómo vincular RadioButtons a una enumeración? (Especifique el valor de enumeración para este botón mediante ConverterParameter. Debe tener un valor de enumeración para cada botón)
Luego, para evitar desmarcar un botón que ya está marcado, coloque esto en su código detrás del evento Click para cada uno de los 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;
}
}
}