como fazer um botão de imagem que altera a imagem quando o mouse sobre o botão WPF?

Eu estou tentando fazer um botão de imagem que muda a imagem quando o mouse está sobre o botão, eu tentei algumas coisas

esta é a última coisa que eu tentei, mas não funciona:

   

Eu estou tring para usar o XAML apenas, sem o arquivo cs Obrigado

Seus gatilhos são aplicados ao StackPanel . Ele precisa ser definido no ControlTemplate

Experimentar:

   

Em tais casos. Você pode apenas usar o Trigger para definir a fonte da imagem, portanto, não ter que jogar com a alternância de Visibility em vários elementos da interface do usuário.

algo como:

   

Você precisará de uma class auxiliar para append a propriedade de origem da imagem por estado de botão e um estilo para o seu botão. Coloque a class auxiliar em uma pasta de Helpers no seu projeto do WPF.

Classe auxiliar

 public static class ImageLoader { public static ImageSource GetDefaultImage(DependencyObject obj) { return (ImageSource)obj.GetValue(DefaultImageProperty); } public static void SetDefaultImage(DependencyObject obj, ImageSource value) { obj.SetValue(DefaultImageProperty, value); } public static readonly DependencyProperty DefaultImageProperty = DependencyProperty.RegisterAttached( "DefaultImage", typeof(ImageSource), typeof(ImageLoader), new UIPropertyMetadata(null)); public static ImageSource GetHoverImage(DependencyObject obj) { return (ImageSource)obj.GetValue(HoverImageProperty); } public static void SetHoverImage(DependencyObject obj, ImageSource value) { obj.SetValue(HoverImageProperty, value); } public static readonly DependencyProperty HoverImageProperty = DependencyProperty.RegisterAttached( "HoverImage", typeof(ImageSource), typeof(ImageLoader), new UIPropertyMetadata(null)); public static ImageSource GetDisabledImage(DependencyObject obj) { return (ImageSource)obj.GetValue(DisabledImageProperty); } public static void SetDisabledImage(DependencyObject obj, ImageSource value) { obj.SetValue(DisabledImageProperty, value); } public static readonly DependencyProperty DisabledImageProperty = DependencyProperty.RegisterAttached( "DisabledImage", typeof(ImageSource), typeof(ImageLoader), new UIPropertyMetadata(null)); } 

Estilo do Botão

    

Uso

     ...  ... 

Você pode conseguir isso pelo estilo de imagem:

   

Aqui está outra abordagem para lidar com isso usando um estilo especializado. Deve-se salientar que isso poderia ser melhorado com o uso de propriedades anexadas para personalizar os arquivos de imagem corretamente.

  

O retângulo é importante para o teste de ocorrências, caso contrário, o IsMouseOver não será acionado. E o Stretch on the ContentAlignment é necessário, caso contrário, o ContentPresenter do botão não abrangeria todo o botão, portanto IsMouseOver não será acionado novamente.