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】自定义事件总结(Action, EventHandler)相关推荐

  1. [Prism]Composite Application Guidance for WPF(8)——事件

      [Prism]Composite Application Guidance for WPF(8)--事件                                            周银 ...

  2. WPF 自定义 MessageBox (相对完善版 v1.0.0.6)

    基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当你不得不弹出一个消息框通知用户消息时(虽然很不建议在程序中频繁 ...

  3. WPF自定义命令(转)

    WPF自定义命令 自定义命令,可以分为两个层次来理解 1.声明自己的RoutedCommand实例,这个层次比较浅 2.从实现ICommand接口开始,这个才算的上真正的自定义命令 自定义命令的目的是 ...

  4. WPF Event事件

    1.1 逻辑树与可视树 如果把一片树叶放在显微镜下观察,你会发现这片叶子也像一棵树----有自己的基部并向上生长出多级分叉.在WPF的Logic Tree上,扮演叶子的一般都是控件.如果我们把WPF中 ...

  5. 如何订阅Form的自定义事件

    Window Form类有很多的属性/方法和事件,其中事件属于一种发布订阅模式 .订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主体对象.这个主体对象在自身状态变化时,会通知所 ...

  6. WPF 自定义标题栏 自定义菜单栏

    原文:WPF 自定义标题栏 自定义菜单栏 自定义标题栏 自定义列表,可以直接修改WPF中的ListBox模板,也用这样类似的效果.但是ListBox是不能设置默认选中状态的. 而我们需要一些复杂的UI ...

  7. 如何在JavaScript中使用自定义事件

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript 的事件处理是所有浏览器端程序的基本必备技巧.当目标元素的事件被触发时,比如按钮被点击,鼠标移动,或者是表 ...

  8. C#事件-自定义事件

    事件有很多,比如说 鼠标的事件:MouserMove,MouserDown等. 键盘的事件:KeyUp,KeyDown,KeyPress. 有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎 ...

  9. YUI经验谈 - 自定义事件默认行为

    纵观主流JS库和框架,YUI在自定义事件方面做的尤为出色.如果需要挑出一个代表性的feature,那么非事件默认行为莫属. 是什么 YUI自定义事件在总体上模仿了DOM事件的设计思想.DOM中的一些事 ...

最新文章

  1. C语言初学者代码中的常见错误与瑕疵(9)
  2. 前端--3、JavaScript
  3. 远程登录的几种方式对比
  4. 记一次转不过弯的递归
  5. python什么时候用进程什么时候用线程_Python多线程/多进程释疑:为啥、何时、怎么用?...
  6. Python实现从url中提取域名的几种方法
  7. Spread for Windows Forms高级主题(6)---数据绑定管理
  8. jetbrains全家桶中好用的快捷键插件:Key Promoter X
  9. python编程特点_Python基础(1)--Python编程习惯与特点
  10. 多多客id是什么意思_【拼多多】关于多多客比价行为规范解释说明
  11. git 配置 diff 、 merge 工具: kdiff3
  12. mysql workbench 安全模式_MySQL Workbench解决安全模式
  13. c# autoscroll_禁用Firefox中令人讨厌的AutoScroll功能
  14. Android Studio制作.9图片,看这一篇就够了
  15. python类的封装是什么意思_python类封装 python中将函数和变量封装成类的好处
  16. pil.unidentifiedimageerror: cannot identify image file
  17. 2.Bulldog渗透实战
  18. 关于Neuro-Fuzzy Designer的使用
  19. 爱看广场舞的老爷爷的笔记---ifconfig命令无法使用
  20. macOS 终端中使用 tree 命令

热门文章

  1. 贪心算法:860.柠檬水找零
  2. 解除Excel密码保护大全
  3. java fault_java-无法捕获AxisFault异常
  4. 火炬之光乱码问题解决
  5. 学习新技能_如何学习新技能
  6. windows查看文件的md5值
  7. 【Todo】【读书笔记】大数据Spark企业级实战版 Scala学习
  8. ironpython安装包_安装Python包 – IronPython
  9. excel 获取url图片_从Excel超链接获取URL
  10. Linux系统sendmail发送邮件