在WPF中,自定义控件是非常强大的功能,可以任由自己编写自己想要的控件,熟悉winform开发的人,对控件的认识不会不清楚,控件中事件,往往是实现各种功能的必要手段,那么在WPF自定义控件中,是否可以自定义一些事件呢,答案是肯定的,这篇文章就简单介绍下如何给自定义控件中添加事件。----姜彦 20170926
在本人某个项目中,由于需要,一个自定义控件中,我放置了多个按钮,我想做的是如何给每个按钮自定义一个事件,以便于其他View添加了这个新的自定义控件时,可以分别使用其中的某个单独的事件,以实现事件的传递,下来开始介绍下自己是如何做的。
如图,是我项目中,自己编写的一个自定义控件:TCellView
从图上可以看出,我放置了6个button按钮,我想做的是如何给每个button一个独立的事件,然后让这个自定义控件TCellView的事件中,有这些事件。
步骤1:
在自定义控件TCellView中,点击btn1,在代码中就会出现btn1的Click事件。其他按钮以此类推,为了方便区别每个按钮,可以增加一个Tag来标记按钮
1 <Button Name="btn1" 2 Content="按键1" 3 Height="20" 4 HorizontalAlignment="Left" 5 Margin="40,0,0,0" 6 VerticalAlignment="Top" 7 Width="40" 8 Background="#FF1B3765" 9 Style="{StaticResource CommonButtonStyle}" 10 Tag="1" 11 Click="btn1_Click" 12 /> 13 14 <Button Name="btn2" 15 Content="按键2" 16 Height="20" 17 HorizontalAlignment="Left" 18 Margin="40,25,0,0" 19 VerticalAlignment="Top" 20 Width="40" 21 Background="#FF1B3765" 22 Style="{StaticResource CommonButtonStyle}" 23 Tag="2" 24 Click="btn1_Click" 25 /> 26 27 <Button Name="btn3" 28 Content="按键3" 29 Height="20" 30 HorizontalAlignment="Left" 31 Margin="40,50,0,0" 32 VerticalAlignment="Top" 33 Width="40" 34 Background="#FF1B3765" 35 Style="{StaticResource CommonButtonStyle}" 36 Tag="3" 37 Click="btn1_Click" 38 /> 39 40 41 <Button Name="btn4" 42 Content="按键4" 43 Height="20" 44 HorizontalAlignment="Left" 45 Margin="40,75,0,0" 46 VerticalAlignment="Top" 47 Width="40" 48 Background="#FF1B3765" 49 Style="{StaticResource CommonButtonStyle}" 50 Tag="4" 51 Click="btn1_Click" 52 />
步骤2:
在cs文件里,开始编写具体的事件实现逻辑。
1.首先定义一个按钮事件的委托的句柄;
2.然后定义具体的按钮事件;
3.通过按钮的Click事件来实现传递
1 #region 事件 2 3 #region 按钮事件 4 5 /// <summary> 6 /// 按钮事件委托 7 /// </summary> 8 /// <param name="sender"></param> 9 /// <param name="e"></param> 10 public delegate void BtnClickHandle(object sender, EventArgs e); 11 12 /// <summary> 13 /// btn1 Click事件 14 /// </summary> 15 public event BtnClickHandle btn1Click; 16 17 /// <summary> 18 /// btn2 Click事件 19 /// </summary> 20 public event BtnClickHandle btn2Click; 21 22 /// <summary> 23 /// btn3 Click事件 24 /// </summary> 25 public event BtnClickHandle btn3Click; 26 27 /// <summary> 28 /// btn4 Click事件 29 /// </summary> 30 public event BtnClickHandle btn4Click; 31 32 /// <summary> 33 /// btn5 Click事件 34 /// </summary> 35 public event BtnClickHandle btn5Click; 36 37 /// <summary> 38 /// btn6 Click事件 39 /// </summary> 40 public event BtnClickHandle btn6Click; 41 42 43 44 private void btn1_Click(object sender, EventArgs e) 45 { 46 47 int Tag = int.Parse((sender as Button).Tag.ToString()); 48 49 switch (Tag) 50 { 51 case 1: 52 if (btn1Click != null) 53 btn1Click(sender, new EventArgs());//把按钮自身作为参数传递 54 break; 55 56 case 2: 57 if (btn2Click != null) 58 btn2Click(sender, new EventArgs()); 59 break; 60 61 case 3: 62 if (btn3Click != null) 63 btn3Click(sender, new EventArgs()); 64 break; 65 66 case 4: 67 if (btn4Click != null) 68 btn4Click(sender, new EventArgs()); 69 break; 70 71 case 5: 72 if (btn5Click != null) 73 btn5Click(sender, new EventArgs()); 74 break; 75 76 case 6: 77 if (btn6Click != null) 78 btn6Click(sender, new EventArgs()); 79 break; 80 81 default: break; 82 83 } 84 85 } 86 87 88 89 #endregion 90 91 #endregion
接下来,我们在任意一个view里,拖入我们的自定义控件TCellView,然后点击属性-事件,看下,就能看到自己定义的事件了