2010-12-22 52 views
2

我的UserControl包含一个按钮。我希望按钮的Click事件直接通过'传递给UserControl的用户。他们会将其视为名为“ButtonClick”的事件。传递来自UserControl的子控件的事件 - 最直接的方式?

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

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

我可能会错过简单的东西,因为我对WPF还不熟悉。

回答

0

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

请参阅如何注册一个处理器此路由事件如下:

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

科林·E.

+0

但是,是不是很奇怪,任何父母可以(默认情况下)访问这些相当内部的信息?此外,UserControl在另一个程序集中。当然,如果这样做能够解决我的问题,无论如何。谢谢。 – 2010-12-22 14:33:59

+0

它只是不工作,因为我在谈论一个用户控件,你可能错过了。投票下来? (因为我不能) – 2011-01-05 10:06:25

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)); 
} 

这是一个从只是直接连线到该按钮的本地事件处理几个步骤,但并不可怕。

相关问题