从UserControl的子控件传递事件 - 最直接的方式?

时间:2010-12-22 14:19:35

标签: .net wpf events user-controls

我的UserControl包含一个按钮。我希望按钮的Click事件能够“直接”直接传递给UserControl的用户。他们会将其视为名为“ButtonClick”的事件。

public event RoutedEventHandler ButtonClick  
{  
    add { _button.Click += value; }  
    remove { _button.Click -= value; }  
}  

这种方法不起作用。我确实在客户端代码中添加了ButtonClick的处理程序,但单击该按钮不会在那里调用它。

我可能会遗漏一些简单的东西,因为我还是WPF的新手。

2 个答案:

答案 0 :(得分:3)

您必须注册RoutedEvent:

public static readonly RoutedEvent ButtonClickEvent = EventManager.RegisterRoutedEvent(
    "ButtonClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyUserControl));

..然后使用该属性来管理新注册的事件处理程序

public event RoutedEventHandler ButtonClick
    {
        add { AddHandler(ButtonClickEvent , value); } 
        remove { RemoveHandler(ButtonClickEvent , value); }
    }

然后显然你需要在按钮的点击事件被触发时引发路由事件:

void button_Click(object sender, EventArgs e)
{
   RaiseEvent(new RoutedEventArgs(ButtonClickEvent));
}

只需几步即可直接连接到按钮的本机事件处理程序,但并不可怕。

答案 1 :(得分:0)

Button Click事件是一个路由事件,这意味着它在应用程序的可视树中上下移动,这意味着按钮的任何父级都可以处理此事件。因此,您不必添加自己的逻辑来支持这一点,即您的代码是多余的!

有关如何为此路由事件注册处理程序,请参阅以下内容:

http://msdn.microsoft.com/en-us/library/ms742806.aspx#event_handing

Colin E。