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; ...
随机推荐
- WGCNA | weighted correlation network analysis
早就接触过这个包了,只是一直畏惧,以为很复杂,也没有应用场景,所以认识很肤浅. 现在有应用场景了,我自己开发了一个幼稚的版本,发现了很多需求,后来想起了WGCNA似乎部分解决了我的问题,今天认真打开了 ...
- Hisat2 bowtie2比对结果解读(Hisat2 Alignment summary)
RNA-seq数据的比对结果怎么解读?网上有很多人问,这里做一个大致的总结. Hisat2和bowtie2比对后产生的Alignment summary的格式是一样的,如下: Alignment su ...
- Linux(centos7)上安装最新版R3.4.1
说来惭愧,居然没有在Linux安装R的经验,因为一直很少用R,用也是在win平台. 下载路径:https://cran.rstudio.com/src/base/R-3/ 强烈建议不要安装最新的R,除 ...
- android ------- 运行官方NDK 案例HelloJNI
下载案例 HelloJNI ,导入工程到Eclipse, 可以直接下载我的案例, 源码下载:https://github.com/DickyQie/android-ndk 目录图 使用命令生成 . ...
- Fiddler抓取https数据包
Wireshark和Fiddler的优缺点: ①Wireshark是一种在网络层上工作的抓包工具,不仅自带大量的协议分析器,而且可以通过编写Wireshark插件来识别自定义的协议.虽然Wiresha ...
- fiddler 显示server ip
Fiddler显示服务器ip地址列(方便查看host是否生效) 2016年08月31日 15:40:10 阅读数:5801 1.点击菜单栏rules——customize rules... 2.ctr ...
- python记录_day09 初识函数
一.认识函数 函数:对动作或者功能的封装 格式: 函数声明 def 函数名(): 函数体 函数调用 函数名() #定义函数 def xiao(): print("你的笑像一 ...
- apache2反向代理
1.安装 Apache2 sudo apt-get install apache2 2.重启服务器 sudo /etc/init.d/apache2 restart 3.虚拟主机配置 启用这几个模块 ...
- springboot项目线程使用
下面是一个demo: public class TestThread { private static int nThreads =Runtime.getRuntime().availableProc ...
- poj-1061-exgcd
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 128285 Accepted: 27962 Descript ...