wpf自定义控件中使用自定义事件


wpf自定义控件中使用自定义事件

1 创建自定义控件及自定义事件

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
26
27
28
29
30
31
32
33
34
35
36
     /// <summary>
     /// 演示用的自定义控件
     /// </summary>
     public  class  ExtButton : Button
     {
         public  ExtButton()
         {
             base .Click += ExtButton_Click;
         }
 
         private  void  ExtButton_Click( object  sender, RoutedEventArgs e)
         {
             //定义传递参数
             // RoutedPropertyChangedEventArgs<Object> args = new RoutedPropertyChangedEventArgs<Object>("1", "2", ControlLoadOverEvent);
             RoutedEventArgs args2 =  new  RoutedEventArgs(ControlLoadOverEvent,  this );
             //引用自定义路由事件
             this .RaiseEvent(args2);
 
         }
         /// <summary>
         /// 声明路由事件
         /// 参数:要注册的路由事件名称,路由事件的路由策略,事件处理程序的委托类型(可自定义),路由事件的所有者类类型
         /// </summary>
         public  static  readonly  RoutedEvent ControlLoadOverEvent = EventManager.RegisterRoutedEvent( "ControlLoadOverEvent" , RoutingStrategy.Bubble,  typeof (RoutedPropertyChangedEventArgs<Object>),  typeof (ExtButton));
         /// <summary>
         /// 处理各种路由事件的方法 
         /// </summary>
         public  event  RoutedEventHandler ControlLoadOver
         {
             //将路由事件添加路由事件处理程序
             add { AddHandler(ControlLoadOverEvent, value); }
             //从路由事件处理程序中移除路由事件
             remove { RemoveHandler(ControlLoadOverEvent, value); }
         }
 
     }

 

2 使用并绑定自定义控件的事件

1
2
3
4
5
6
7
8
             <!--i为System.Windows.Interactivity引用-->
             <ext:ExtButton x:Name= "extButton"  Content= "绑定自定义事件"  HorizontalAlignment= "Left"  Margin= "123,10,0,0"  VerticalAlignment= "Top"  Width= "95" >
                 <i:Interaction.Triggers>
                     <i:EventTrigger EventName= "ControlLoadOver" >
                         <i:InvokeCommandAction Command= "{Binding ButtonLoadOverCommand}"  CommandParameter= "{Binding ElementName=extButton}" ></i:InvokeCommandAction>
                     </i:EventTrigger>
                 </i:Interaction.Triggers>
             </ext:ExtButton>

 

3 触发自定义事件后的操作

方式1

1
2
3
4
5
6
7
8
9
10
         public  DelegateCommand<Object> ButtonLoadOverCommand {  get set ; }
         public  void  ButtonLoadOver(Object obj)
         {
             //这里的参数为自定义控件对象
             ExtButton btn = obj  as  ExtButton;
             if  (btn !=  null )
             {
                 var content = btn.Content;
             }
         }

方式2

1
2
3
4
5
6
7
         this .extButton.ControlLoadOver += ExtButton_ControlLoadOver;
 
         private  void  ExtButton_ControlLoadOver( object  sender, RoutedEventArgs e)
         {
             var btn = (Button)e.Source;
             var str = btn.Content;
         }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM