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