如何触发用户控件中的代码后面的按钮Click事件?

时间:2010-08-27 19:15:08

标签: silverlight-4.0

是否可以在用户控件中的代码中触发按钮Click事件?

1 个答案:

答案 0 :(得分:5)

在C#中,事件只能从声明它们的类中调用。在Button的情况下,有一个名为OnClick的方法,它引发了ClickEvent但它受到了保护。所以你需要声明继承自Button的类并更改OnClick方法的可见性(或者声明一些调用base.OnClick的方法)

public class MyButton : Button
{
    public new void OnClick()
    {
        base.OnClick();
    }
}

XAML的例子

<StackPanel Background="White" >
    <my:MyButton x:Name="TestButton" Click="HandleClick" Content="Test" />
    <TextBlock x:Name="Result" />
</StackPanel>

代码背后:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        new Timer(TimerCall,null,0,1000);
    }

    private void TimerCall(object state)
    {
        Dispatcher.BeginInvoke(()=>TestButton.OnClick());
    }

    private void HandleClick(object sender, RoutedEventArgs e)
    {
        Result.Text = String.Format("Clicked on {0:HH:mm:ss}",DateTime.Now);
    }
}

虽然直接调用事件处理程序总是更容易。

HandleClick(this,null)

然后就不需要额外的管道了。