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