<Grid>
        <StackPanel ButtonBase.Click="StackPanel_Click" Margin = "5">
            <Button Name="btn1" Tag="jeden">Przycisk 1</Button>
            <Button Name="btn2" Tag="dwa">Przycisk 2</Button>
            <Button Name="btn3" Tag="trzy">Przycisk 3</Button>
        </StackPanel>
    </Grid>
namespace events
{
    public partial class MainWindow : Window
    {
        Button b1;
        public MainWindow()
        {
            InitializeComponent();
            b1 = btn3;
        }

        private void StackPanel_Click(object sender, RoutedEventArgs e)
        {
            b1.Tag = "MY BUTTON";
            MessageBox.Show( e.Source.ToString() +"\n"+ sender.ToString() + "\n" + (String)((FrameworkElement)e.Source).Tag);
            b1.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent, this));
        }
    }
    public abstract class ButtonBase : ContentControl
    {
        public static readonly RoutedEvent ClickEvent;
        
        static ButtonBase()
        {
            ButtonBase.ClickEvent = EventManager.RegisterRoutedEvent("MyClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonBase));
        }

        public event RoutedEventHandler MyClick
        {
            add
            {
                base.AddHandler(ButtonBase.ClickEvent, value);
            }
            remove
            {
                base.RemoveHandler(ButtonBase.ClickEvent, value);
            }
        }
    }
}

w kodzie powyżej użyłem tego jak w tutorialach ale nic się nie dzieje, nie wiem jak sprawić żeby coś się działo
mógłby ktoś wytłumaczyć jak używa się Routed Events i jak sprawić żeby się do czegoś przydało się to,?
z tego co rozumiem to RoutedEvent to np. click event ale okodowany w c# a nie w xamlu, dobrze rozumiem?