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; ...
随机推荐
- layui 日期插件onchange事件失效的方法
laydate.render({ elem:'#text1',//制定元素 type:'date', //range:true,//开启左右面板 min:'2017-09-1',// max:'201 ...
- Ubuntu终端多窗口分屏Terminator
1.安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator 2.快捷键 Ctrl+Shift+E 垂直分割窗口 Ct ...
- mysql5.6以上版本: timestamp current_timestamp报1064/1067错误
mysql5.6以上版本: timestamp current_timestamp报1064/1067错误 在创建时间字段的时候 DEFAULT CURRENT_TIMESTAMP表示当插入数据的时候 ...
- 用R的dgCMatrix包来构建稀疏矩阵 | sparse matrix by dgCMatrix
sparse matrix是用来存储大型稀疏矩阵用得,单细胞表达数据基本都用这个格式来存储,因为单细胞很大部分都是0,用普通文本矩阵存储太占空间. 使用也是相当简单: library("Ma ...
- 扩大了一个逻辑卷,resize2fs 保错:没有这个超级块
检查发现,文件系统类型是xfs,应该使用 xfs_growfs命令刷新文件系统
- every day a practice —— morning(2)
Two years at sea have fostered a close relationship between the two fellow sailors as they cross the ...
- 【WPF】Silverlight中的Action与Trigger
最近做的Silverlight项目上用到了大量的拖拽,自动跟随等功能,由于赶时间,加上对Silverlight半生不熟,用的是最简单也是最不好维护的方法.项目忙完了闲下来,想重构一下代码,想起了Tri ...
- vue动画
最近想搞搞vue的过渡和动画,以为照着官网写就好了,谁知道还是出现一些状况 具体表现就是不用webpack打包时候写的过渡是正常的,而用了webpack打包就不正常了 说使用了未定义的element: ...
- sqlserver给指定用户授权访问指定表
一. 背景 外部公司的人授权访问我们公司的数据库,数据接口调用,要给他们建立查看指定的视图和授权的账号,因此要在数据库中,给指定用户授权访问指定表 二.sqlserver 脚本 ---创建视图CR ...
- LINQ 中常用函数使用: Take TakeWhile Skip SkipWhile Reverse Distinct
1,Take 方法 Take方法用于从一个序列的开头返回指定数量的元素. string[] names = { "郭靖", "李莫愁", "欧阳晓晓& ...