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; }
|
wpf自定义控件中使用自定义事件的更多相关文章
- [WPF自定义控件]?使用WindowChrome自定义Window Style
原文:[WPF自定义控件]?使用WindowChrome自定义Window Style 1. 为什么要自定义Window 对稍微有点规模的桌面软件来说自定义的Window几乎是标配了,一来设计师总是克 ...
- DragonBones龙骨骨骼中的自定义事件(另有声音、动画事件)
参考: DragonBones骨骼动画事件系统详解 一.在DragonBones中添加自定义事件帧 动画制作时 时间轴拉到最下面有一个事件层,添加一个事件帧 左边属性面板定义自定义事件 二.Egret ...
- WPF程序中的弱事件模式
在C#中,得益于强大的GC机制,使得我们开发程序变得非常简单,很多时候我们只需要管使用,而并不需要关心什么时候释放资源.但是,GC有的时并不是按照我们所期望的方式工作. 例如,我想实现一个在窗口的标题 ...
- Spring中实现自定义事件
原理: 通过扩展ApplicationEvent,创建一个事件类CustomEvent.这个类必须定义一个默认的构造函数,它应该从ApplicationEvent类中继承的构造函数. 一旦定义事件类, ...
- vue--组件中的自定义事件
父组件通过props向子组件传递数据,子组件通过自定义事件向父组件传递信息. 在子组件中通过$emit触发事件,父组件在直接使用子组件的地方使用v-on(即@)来监听子组件触发的事件. 举例:(不知道 ...
- [WPF 自定义控件]使用WindowChrome自定义RibbonWindow
1. 为什么要自定义RibbonWindow 自定义Window有可能是设计或功能上的要求,可以是非必要的,而自定义RibbonWindow则不一样: 如果程序使用了自定义样式的Window,为了统一 ...
- DOM3中的自定义事件
DOM3级还定义了自定义事件,自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件.要创建的自定义事件可以由createEvent("CustomEvent"); ...
- JS 中的自定义事件和模拟事件
在 JS 中模拟事件指的是模拟 JS 中定义的一些事件,例如点击事件,键盘事件等. 自定义事件指的是创建一个自定义的,JS 中之前没有的事件. 接下来分别说一下创建这两种事件的方法. 创建自定义事件 ...
- 【转】Flash AS3.0 中的自定义事件
原文 http://www.cnblogs.com/acpp/archive/2010/10/19/1855670.html package { import flash.events.Event; ...
随机推荐
- python的try finally (还真不简单)
https://www.cnblogs.com/cotton/p/3785999.html def f(): try: print 1 return 1 finally: print 0 return ...
- MYSQL常用函数(格式化函数)
DATE_FORMAT(date,fmt) 依照字符串fmt格式化日期date值 FORMAT(x,y) 把x格式化为以逗号隔开的数字序列,y是结果的小数位数 INET_ATON(ip) 返 ...
- Codeforces 488B - Candy Boxes
B. Candy Boxes 题目链接:http://codeforces.com/problemset/problem/488/B time limit per test 1 second memo ...
- js中use或者using方法
看Vue.use方法,想起了以前工作中别人用过的use方法. var YANMethod = { using:function() { var a = arguments, o = this, i = ...
- 第 8 章 容器网络 - 050 - 创建 overlay 网络
在 host1 中创建 overlay 网络 ov_net1: docker network create -d overlay ov_net1 -d overlay 指定 driver 为 over ...
- centos7【防火墙】常用规则
1.防火墙常用规则 systemctl start iptables systemctl stop iptables systemctl restart iptablesiptables -nvL 1 ...
- 20181014xlVBA获取小题零分名单
Sub GetZeroName() Dim Dic As Object Const SUBJECT = "科目名称" Dim Key As String Dim OneKey Di ...
- Build Castles(构建城堡)
Charlemagne, the King of Frankie, 英文描述 请参考图片中的说明. 中文描述 根据给出的数组确定能够盖多少城堡. 思路和点评 我不能确定我的思路是正确的,也欢迎大家参与 ...
- thinkphp5的生命周期
1.入口文件 虚拟主机目录/public/index.php 2.引入启动文件 虚拟主机目录/thinkphp/start.php 3.运行App下面的run方法 虚拟主机目录/thinkphp/li ...
- Jamie and Tree CodeForces - 916E (换根)
大意: n节点树, 每个点有权值, 三种操作: 1,换根. 2, lca(u,v)的子树权值全部增加x. 3, 查询子树权值和. 先不考虑换根, 考虑子树x加v的贡献 (1)对fa[x]到根的树链贡献 ...