基本上我的程序有两个主要组件。
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");
}