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

WPF,C#:如何处理从动态创建的用户控件引发的事件,c#,wpf,dynamic,user-controls,event-handling,C#,Wpf,Dynamic,User Controls,Event Handling,基本上,我的程序有两个主要组件。 1) 我有一个主窗口,其中包含动态创建的用户控件。 2) 两种不同类型的用户控件(ctr1和ctr2) 我希望能够按下ctr1上的一个按钮,让它弹出一个事件,并让主窗口处理该事件,从而创建另一个ctr2实例。我面临的问题是,老实说,我找不到任何好的资源来提供如何实现这一点的实际代码示例 在ctr1中,我有: public event RoutedEventHandler MyEvent { add { AddHandler(MyE

基本上,我的程序有两个主要组件。
1) 我有一个主窗口,其中包含动态创建的用户控件。
2) 两种不同类型的用户控件(ctr1和ctr2)
我希望能够按下ctr1上的一个按钮,让它弹出一个事件,并让主窗口处理该事件,从而创建另一个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.RouteEvent,System.Delegate)”需要对象引用

如果这是一个非常初级的问题,我很抱歉,但我几天前才开始学习WPF和C,我还没有找到一个好的在线教程,可以清楚地解释所有内容。

检查错误:

非静态字段、方法或对象需要对象引用 财产 'System.Windows.UIElement.AddHandler(System.Windows.RouteEvent, “系统代理”

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

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");
}

我上面的代码是一个快速复制粘贴。实际上,我有点尴尬,因为我没有正确地查看它。“RaiseEvent_click()”应该是“OnClick()”。。。。。