WPF – Cómo crear botón de imagen con plantilla

Intento crear un botón que tenga 3 imágenes: una imagen Normal, una Imagen Presionada y una Imagen Inhabilitada (las usaré para crear botones de flecha arriba / abajo).

Creo que el enfoque correcto sería derivar de Button y usar una Template y establecer disparadores para cambiar la imagen. Tengo 3 propiedades de dependencia, una para cada imagen.

Las imágenes serían .png y tienen fondos transparentes (ya que no son rectangulares).

Estoy buscando algo como CBitmapButton en MFC.

No necesitará propiedades de dependencia porque hereda de Button . Ya tiene las propiedades IsPressed e IsEnabled . De hecho, esto es todo lo que necesitas:

  

Con su archivo de código subyacente UserControl:

 public partial class ThreeStateImageButton : Button { public ThreeStateImageButton() { InitializeComponent(); } } 

He proporcionado una alternativa a esta solución, no es tan liviana, pero ofrece una reutilización mucho mayor.

Botón de imagen TriState de WPF

  public static readonly DependencyProperty DefaultImageSourceProperty = DependencyProperty.Register("DefaultImageSource", typeof(ImageSource), typeof(PressedImageButton), new PropertyMetadata(null, new PropertyChangedCallback(DefaultImageSourceChangedCallback))); public static readonly DependencyProperty PressedImageSourceProperty = DependencyProperty.Register("PressedImageSource", typeof(ImageSource), typeof(PressedImageButton), new PropertyMetadata(null, new PropertyChangedCallback(PressedImageSourceChangedCallback))); public static readonly DependencyProperty ImageStretchProperty = DependencyProperty.Register("ImageStretch", typeof(Stretch), typeof(PressedImageButton), new PropertyMetadata(Stretch.None, new PropertyChangedCallback(ImageStretchChangedCallback))); 

                         

Simplemente prueba este código

   

La manera simple en WPF:

  1. Crea una imagen de botón con Photoshop u otros progtwigs.

  2. Colóquelo en su ventana y use los eventos MouseEnter y MouseLeave .

     private void img1_MouseEnter(object sender, MouseEventArgs e) { Cursor = Cursors.Hand; } private void img1_MouseLeave(object sender, MouseEventArgs e) { Cursor = Cursors.Arrow; }