如何使用动态创建的子元素中的路由事件?

时间:2011-12-21 17:44:57

标签: c# wpf routedevent routedeventargs

我的MainWindow中有一个事件被我的一个子控件作为路由事件触发。 MainWindow有一个AddHandler调用来捕获路由火。

我想从另一个子元素中触发这个相同的事件,但是这个元素(一个menuItem)是动态创建的,所以当我尝试在MainWindow中使用AddHandler时,如:

 this.AddHandler(MyMenuItem.EditExtensionsEvent, new RoutedEventHandler(this.EditExtensions));

我得到一个null参数异常,因为MyMenuItem尚不存在。

任何人都知道我仍然可以使用路由事件吗?

1 个答案:

答案 0 :(得分:1)

我假设您的MyMenuItem不在应用程序的命名空间中,或者EditExtensionsEvent不是MyMenuItem类的静态RoutedEvent。

看起来应该是这样的:

public class MyMenuItem
{
public static readonly RoutedEvent EditExtensionsEvent
..
}

请参阅http://msdn.microsoft.com/en-us/library/ms752288.aspx

如果以这种方式声明它应该像你在这里显示的那样工作

修改 我建议注册一个已经存在的事件,以确保您的EditExtensionsEvent正常工作。

public MainWindow()
{
  ..
  this.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(this.MenuItemClick));
}

private void MenuItemClick(object sender, RoutedEventArgs e)
{
   MessageBox.Show("Clicked");
}