在自定义控件时,经常要用到自定义事件,在WPF中可以使用两种方式来定义事件,
1 2 3 4 5 6 7 8 9 10 | public partial class UserControl1 : UserControl { public static readonly RoutedEvent OkButtonClickEvent = EventManager.RegisterRoutedEvent( "OkButtonClick" , RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (UserControl1)); public event RoutedEventHandler OkButtonClick { add { AddHandler(OkButtonClickEvent, value); } remove { RemoveHandler(OkButtonClickEvent, value); } } } |
或
1 2 3 4 | public partial class UserControl1 : UserControl { public event RoutedEventHandler CancelButtonClick; } |
引发事件分别为:
1 2 3 4 | protected void On_BtnOK_Click( object sender, RoutedEventArgs e) { RaiseEvent( new RoutedEventArgs(OkButtonClickEvent)); } |
和
1 2 3 4 5 6 7 | protected void On_BtnCancel_Click( object sender, RoutedEventArgs e) { if (CancelButtonClick != null ) { CancelButtonClick(sender, e); } } |
编写测试用例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public void Test1() { //this.userControl11.AddHandler(UserControl1.ButtonClickEvent, new RoutedEventHandler(userControl11_OkButtonClick)); this .userControl11.OkButtonClick += new RoutedEventHandler(userControl11_OkButtonClick); this .userControl11.CancelButtonClick += new RoutedEventHandler(userControl11_CancelButtonClick); Button btnOK = this .userControl11.FindName( "btnOK" ) as Button; btnOK.RaiseEvent( new RoutedEventArgs(Button.ClickEvent)); Button btnCancel = this .userControl11.FindName( "btnCancel" ) as Button; btnCancel.RaiseEvent( new RoutedEventArgs(Button.ClickEvent)); this .userControl11.OkButtonClick -= new RoutedEventHandler(userControl11_OkButtonClick); this .userControl11.CancelButtonClick -= new RoutedEventHandler(userControl11_CancelButtonClick); } private void userControl11_OkButtonClick( object sender, RoutedEventArgs e) { Console.WriteLine( "userControl11_OkButtonClick" ); } private void userControl11_CancelButtonClick( object sender, RoutedEventArgs e) { Console.WriteLine( "userControl11_CancelButtonClick" ); } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步