我的UserControl包含一个按钮。我希望按钮的Click事件能够“直接”直接传递给UserControl的用户。他们会将其视为名为“ButtonClick”的事件。
public event RoutedEventHandler ButtonClick
{
add { _button.Click += value; }
remove { _button.Click -= value; }
}
这种方法不起作用。我确实在客户端代码中添加了ButtonClick的处理程序,但单击该按钮不会在那里调用它。
我可能会遗漏一些简单的东西,因为我还是WPF的新手。
答案 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。