【问题标题】:How to fire a button Click event in code behind in user control?如何在用户控件后面的代码中触发按钮单击事件?
【发布时间】:2010-08-27 19:15:08
【问题描述】:

是否可以在用户控件后面的代码中触发按钮单击事件?

【问题讨论】:

    标签: silverlight-4.0


    【解决方案1】:

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

    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)
    

    那么就不需要额外的管道了。

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多