using System.Windows.Controls.Primitives;
using System.Windows;
using System.Windows.Input;

namespace RoutedEvents
{
    public class MyButton : ButtonBase
    {
        //zdarzenie routedEvent
        public static readonly RoutedEvent MyMouseEnterEvent;
        //drugie zdarzenie routedEvent
        public static readonly RoutedEvent MyMouseLeaveEvent;
        static MyButton()
        {
            // rejestracja zdarzenia
            MyButton.MyMouseEnterEvent = EventManager.RegisterRoutedEvent("MyMouseEnter",
            RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButton));
            // rejestracja drugiego zdarzenia
            MyButton.MyMouseLeaveEvent = EventManager.RegisterRoutedEvent("MyMouseLeave",
           RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButton));
        }
        //opcjonalny wrapper zapewniający możliwość zdefiniowania uchwytu dla zdarzenia w kodzie XAML
        //również w notacji zdarzenia dołączonego
        public event RoutedEventHandler MyMouseEnter
        {
            add { AddHandler(MyButton.MyMouseEnterEvent, value); }
            remove { RemoveHandler(MyButton.MyMouseEnterEvent, value); }
        }
        public event RoutedEventHandler MyMouseLeave
        {
            add { AddHandler(MyButton.MyMouseLeaveEvent, value); }
            remove { RemoveHandler(MyButton.MyMouseLeaveEvent, value); }
        }
        //wywolanie zdarzenia w momencie gdy kursor myszy jest nad obiektem
        protected override void OnMouseEnter(MouseEventArgs e)
        {
            RaiseEvent(new RoutedEventArgs(MyButton.MyMouseEnterEvent, this));
        }
        //wywolanie zdarzenia w momencie gdy kursor myszy jest przenoszony znad obiektu
        protected override void OnMouseLeave(MouseEventArgs e)
        {
            RaiseEvent(new RoutedEventArgs(MyButton.MyMouseLeaveEvent, this));
        }
    }
}
