WPF、C#:如何处理从动态创建的用户控件引发的事件

WPF, C#: How to handle an event raised from dynamically created user controls

基本上我的程序有两个主要组成部分。
1) 我有我的主要 window,其中包含我动态创建的用户控件。
2) 两种不同类型的用户控件。(ctr1 和 ctr2)
我希望能够按下 ctr1 上的一个按钮,让它冒泡一个事件并让主 window 处理将创建另一个 ctr2 实例的事件。我遇到的问题是,老实说,我找不到任何好的资源来提供有关如何完成此操作的实际代码示例。

在 ctr1 我有:

    public event RoutedEventHandler MyEvent
    {
        add { AddHandler(MyEvent_randomName, value); }
        remove { RemoveHandler(MyEvent_randomName, value); }
    }

    void RaiseMyEvent()
    {
        RoutedEventArgs newEventArgs = new RoutedEventArgs(ctr1.MyEvent_randomName);
        RaiseEvent(newEventArgs);
    }
    protected override void RaiseEvent_click()
    {
        RaiseMyEvent();
    }  

对于我的主窗口,我有:

 public MainWindow()
    {
        InitializeComponent();
        MainWindow.AddHandler(ctr1.MyEvent_randomName, new RoutedEventHandler(MyButtonHandler));

    }
    void MyButtonHandler(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("My New Clicked Event");
    }

我 运行 遇到麻烦的地方是“MainWindow.AddHandler(ctr1.MyEvent_random......);
我不断收到错误消息:
非静态字段、方法或需要对象引用 属性 'System.Windows.UIElement.AddHandler(System.Windows.RoutedEvent, System.Delegate)'

如果这是一个非常初学者的问题,我很抱歉,但我几天前才开始使用 WPF 和 C#,我还没有找到一个很好的在线教程来解释所有内容。

检查错误:

An object reference is required for the non-static field, method, or property 'System.Windows.UIElement.AddHandler(System.Windows.RoutedEvent, System.Delegate)'

您正在尝试静态访问该方法:

MainWindow.AddHandler . . .

你应该在什么时候做:

AddHandler . . .

顺便说一句,你可能想看看 ICommand 和 MVVM 来做你想做的事,但作为初学者,你现在有很多东西要学 ;)

你可以试试这个:

在 ctr1

public event EventHandler Ctrl1ClickEvent;

当你按下 ctrl1 中的按钮时

Ctrl1ClickEvent(this, EventArgs.Empty);

在主窗口中

public MainWindow()
{
    InitializeComponent();
    this.ctrl1.Ctrl1ClickEvent  += ctrl1ClickHandler;

}

private void ctrl1ClickHandler(object sender, EventArgs e)
{
     MessageBox.Show("My New Clicked Event");
}