No estoy seguro de entender completamente tus preguntas, pero déjame intentarlo. También importa cuán profundo quieras ir aquí. Hay muchas maneras de despellejar a este gato.
1 - Creo que estás preguntando cómo usar la IsCheckedpropiedad para influenciar el aspecto de la CheckBox? La forma de hacerlo es volver a crear la plantilla CheckBoxy usar un desencadenador en la plantilla. Algo como esto:
<CheckBox>
<CheckBox.Template>
<ControlTemplate TargetType="CheckBox">
<StackPanel Orientation="Horizontal">
<Image x:Name="_image" Source="Unchecked.jpg"/>
<ContentControl Content="{Binding Content}"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="_image" Property="Source" Value="Checked.jpg"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</CheckBox.Template>
</CheckBox>
Hay más que considerar aquí, pero eso debería ayudarlo a comenzar.
2 - Puede usar InputBindingspara ejecutar un comando cuando el control recibe alguna entrada. Por lo tanto, puede definir un comando que verifique o desmarque el apropiado CheckBoxsegún el parámetro pasado al comando. Entonces puedes hacer algo como esto:
<CheckBox>
<CheckBox.InputBindings>
<KeyBinding Key="1" Command="{x:Static local:Commands.YourCommand}" CommandParameter="1"/>
</CheckBox.InputBindings>
</CheckBox>
Nuevamente, hay muchas maneras de resolver sus problemas aquí. Espero que esto te guíe en la dirección correcta.