基本上我的程序有两个主要组成部分
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();
}
对于我的mainWindow我有:
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#,我还没有找到一个很好的在线教程,可以清楚地解释一切。
答案 0 :(得分:2)
检查错误:
非静态字段,方法或者需要对象引用 属性 “System.Windows.UIElement.AddHandler(System.Windows.RoutedEvent, System.Delegate)'
您正试图静态访问该方法:
MainWindow.AddHandler。 。
当你应该做的时候:
AddHandler . . .
顺便说一句,你可能想看看ICommand和MVVM做你想做的事情,但作为一个初学者,你现在有很多需要学习的东西;)
答案 1 :(得分:0)
你可以试试这个:
在ctr1中
public event EventHandler Ctrl1ClickEvent;
按ctrl1中的按钮
Ctrl1ClickEvent(this, EventArgs.Empty);
在mainWindow
public MainWindow()
{
InitializeComponent();
this.ctrl1.Ctrl1ClickEvent += ctrl1ClickHandler;
}
private void ctrl1ClickHandler(object sender, EventArgs e)
{
MessageBox.Show("My New Clicked Event");
}