【wpf】自定义事件总结(Action, EventHandler)
2023-09-11 14:14:50 时间
Action和EventHandle
Action和EventHandler都是.net帮我定义好的委托,我们可以直接使用,方便的定义事件。
利用Action定义事件
//无参事件
event Action Event1;
//有参事件
event Action<int, int, string> Event2;
事件订阅和事件处理
public 事件测试()
{
InitializeComponent();
// 事件的订阅
Event1 += 事件测试_Event1;
Event2 += 事件测试_Event2;
}
private void 事件测试_Event1()
{
MessageBox.Show("事件测试_Event1");
}
private void 事件测试_Event2(int arg1, int arg2, string arg3)
{
MessageBox.Show($"{arg1 + arg2} {arg3}");
}
事件的触发
private void btn1_Click(object sender, RoutedEventArgs e)
{
//事件的触发
Event1?.Invoke();
}
private void btn2_Click(object sender, RoutedEventArgs e)
{
//事件的触发
Event2?.Invoke(1, 2, "test");
}
这里通过Invoke调用和直接调用,效果和效率都是一样的,这样写凸显出这是这个事件的触发,事件后的问号表示,如果事件为空就不触发的一种简单写法。
EventHandler
EventHandler,在.net6中感觉和Action的区别已经不大了,调用时有些差别(见下面代码)。之前的版本中只有用EventHandler定义的事件才能在Xaml中使用,在.net6使用Action定义的事件也可以在Xaml中使用了。
这里我定义了一个控件,并分别通过两种方式定义了事件
public class Class1 : Button
{
public event Action EventTest;
public event EventHandler<string> Event3;
protected override void OnClick()
{
EventTest?.Invoke();
Event3?.Invoke(this, "123"); // 事件的调用方式稍有不同
base.OnClick();
}
}
发现在前台Xaml都是可以直接使用的:
<local:Class1 EventTest="Class1_EventTest" Event3="Class1_Event3" >Class1</local:Class1>
private void Class1_EventTest()
{
MessageBox.Show("Class1_EventTest");
}
private void Class1_Event3(object sender, string e)
{
MessageBox.Show($"Class1_Event3: {e}");
}
小结:
可以说通过Action和EventHandle,自定义事件是相当的方便简单了。
相关文章
- WPF拖放功能实现
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- wpf仪表盘
- wpf控件库
- wpf 客户端【JDAgent桌面助手】开发详解(三) 瀑布流效果实现与UI虚拟化优化大数据显示
- WPF ComboBox(转)
- WPF路由事件二:路由事件的三种策略
- WPF自定义控件(2)——图表设计[1]
- WPF 中的 路由事件
- WPF快速入门系列(3)——深入解析WPF事件机制
- Spread 16.X FOR WPF 中文版 我就喜欢 Spread.NET
- Neodynamic Barcode Professional for WPF 11.0 cRACK
- WPF MVVM从入门到精通1:MVVM模式简介
- 【WPF】附加事件
- WPF阴影效果(DropShadowEffect)
- WPF 装饰器(Adorner)