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:
Crea una imagen de botón con Photoshop u otros progtwigs.
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; }