Этот класс я для себя писал, можешь взять..)
Реализация полностью в коде, настраиваются 3 свойства: NormalStateImage, HoverStateImage, PressedStateImage. Передаётся uri картинки.
| Код | public class ImageButton : Button { #region Fields
private event EventHandler<MouseButtonEventArgs> MouseDown; private event EventHandler<MouseButtonEventArgs> MouseUp;
private Image _contentImage; private readonly Dictionary<string, BitmapImage> _stateBitmaps = new Dictionary<string, BitmapImage>();
#endregion
#region Dependency properties
public string NormalStateImage { get { return (string)GetValue(NormalStateImageProperty); } set { SetValue(NormalStateImageProperty, value); SetImage(value); } }
public static readonly DependencyProperty NormalStateImageProperty = DependencyProperty.Register("NormalStateImage", typeof(string), typeof(ImageButton), new PropertyMetadata(null));
public string HoverStateImage { get { return (string)GetValue(HoverStateImageProperty); } set { SetValue(HoverStateImageProperty, value); } }
public static readonly DependencyProperty HoverStateImageProperty = DependencyProperty.Register("HoverStateImage", typeof(string), typeof(ImageButton), new PropertyMetadata(null));
public string PressedStateImage { get { return (string)GetValue(PressedStateImageProperty); } set { SetValue(PressedStateImageProperty, value); } }
public static readonly DependencyProperty PressedStateImageProperty = DependencyProperty.Register("PressedStateImage", typeof(string), typeof(ImageButton), new PropertyMetadata(null));
#endregion
#region Ctor
public ImageButton() { _contentImage = new Image(); Content = _contentImage; Padding = new Thickness(0); BorderThickness = new Thickness(0); MouseDown += new EventHandler<MouseButtonEventArgs>(ButtonExt_MouseDown); MouseUp += new EventHandler<MouseButtonEventArgs>(ButtonExt_MouseUp); MouseEnter += new MouseEventHandler(ButtonExt_MouseEnter); MouseLeave += new MouseEventHandler(ButtonExt_MouseLeave); }
#endregion
#region Image states
void ButtonExt_MouseLeave(object sender, MouseEventArgs e) { SetImage(NormalStateImage); }
void ButtonExt_MouseEnter(object sender, MouseEventArgs e) { SetImage(HoverStateImage); }
void ButtonExt_MouseUp(object sender, MouseButtonEventArgs e) { SetImage(HoverStateImage); }
void ButtonExt_MouseDown(object sender, MouseButtonEventArgs e) { SetImage(PressedStateImage); }
private void SetImage(string uri) { if (string.IsNullOrEmpty(uri)) { return; }
if (!_stateBitmaps.ContainsKey(uri)) { _stateBitmaps[uri] = new BitmapImage(new Uri(uri, UriKind.RelativeOrAbsolute)); }
_contentImage.Source = _stateBitmaps[uri]; }
#endregion
#region Base overrides
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { base.OnMouseLeftButtonDown(e);
var handler = MouseDown; if (handler != null) { handler(this, e); } }
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) { base.OnMouseLeftButtonUp(e);
var handler = MouseUp; if (handler != null) { handler(this, e); } }
protected override void OnGotFocus(RoutedEventArgs e) { // do nothing in order to disable button focus }
#endregion }
|
|