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



基本上我的程序有两个主要组件。
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.RoutedEvent, System.Delegate)"需要对象引用

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

检查错误:

非静态字段、方法或 财产 'System.Windows.UIElement.AddHandler(System.Windows.RoutedEvent, 系统.委托)'

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

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

相关内容

  • 没有找到相关文章