WPF Cambiar imagen de fondo del botón cuando se hace clic

Creé un Button y establecí su Image fondo. Lo que quiero es que cuando se hace clic en el Button , quiero reemplazar la Image fondo con otra

¿Cómo puedo lograr esto?

Aquí está mi código con el Button :

   

Puedes hacer esto programáticamente (ver ejemplo aquí )

o

Puede usar DataTriggers , donde DataTrigger está vinculado a un valor bool en su ViewModel y cambia el Style de su Button . El Button está vinculado a un Command , por lo que cuando se ejecuta, el Command cambiará el estado de la image (la propiedad isPlaying ).

xaml:

  

do#:

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = new ViewModel(); } } public class ViewModel : INotifyPropertyChanged { private bool _isPlaying = false; private RelayCommand _playCommand; public ViewModel() { isPlaying = false; } public bool isPlaying { get { return _isPlaying; } set { _isPlaying = value; OnPropertyChanged("isPlaying"); } } public ICommand PlayCommand { get { return _playCommand ?? new RelayCommand((x) => { var buttonType = x.ToString(); if (null != buttonType) { if (buttonType.Contains("Play")) { isPlaying = false; } else if (buttonType.Contains("Stop")) { isPlaying = true; } } }); } } public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } public class RelayCommand : ICommand { private readonly Predicate _canExecute; private readonly Action _execute; public event EventHandler CanExecuteChanged; public RelayCommand(Action execute) : this(execute, null) { } public RelayCommand(Action execute, Predicate canExecute) { _execute = execute; _canExecute = canExecute; } public bool CanExecute(object parameter) { if (_canExecute == null) { return true; } return _canExecute(parameter); } public void Execute(object parameter) { _execute(parameter); } public void RaiseCanExecuteChanged() { if (CanExecuteChanged != null) { CanExecuteChanged(this, EventArgs.Empty); } } }