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; ...
随机推荐
- DAY5 基本数据类型及内置方法
一.可变与不可变数据类型 1.可变类型:值改变,但是id不变,证明就是在改变原值,是可变类型 2.不可变类型:值改变,但是id也跟着变,证明是产生了新的值,是不可变类型 二.数字类型 1.整型int ...
- cocos2dx 3.x 集成protobuf
vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程也可参考. 主要参考博文地址<cocos2dx 3.x C++搭建protobuf环 ...
- Codeforces 801C - Voltage Keepsake
C. Voltage Keepsake 题目链接:http://codeforces.com/problemset/problem/801/C time limit per test 2 second ...
- Asp.net core 学习笔记 ( Identity 之 Authentication )
和从前的 identity 区别不是很大. 从 2.1 开始 vs 模板的 identity 都被封装了起来, 你几乎看不到任何一行代码, 需要向下面这样打开它, 才能做修改. 说一下比较常用的配置 ...
- 第 7 章 多主机管理 - 047 - 管理 Machine
管理 Machine Docker Machine 则很简单 docker-machine env host1 显示访问 host1 需要的所有环境变量: 根据提示,执行 eval $(docker- ...
- layui 下拉框不显示解决方法
添加以下代码 layui.use('form', function(){ var form = layui.form; form.render(); });
- HG255D 刷机备忘
<该死的系统,就是不重启.这文章也没意义了> 1.前期固件准备:①软件:XXXXX.bin②openwrt固件:XXXX.bin(我用的是shcl版的,感觉还不错,你也可以刷其他版本的) ...
- 数据结构(C语言版)-第8章 排序
8.1 概述 1. 什么是排序? 将一组杂乱无章的数据按一定规律顺次排列起来. 2. 排序的目的是什么? ——便于查找! 3. 什么叫内部排序?什么叫外部排序? 若待排序记录都在内存中,称为内部排序 ...
- 雷林鹏分享: XML CDATA
XML CDATA XML 文档中的所有文本均会被解析器解析. 只有 CDATA 区段中的文本会被解析器忽略. PCDATA - 被解析的字符数据 XML 解析器通常会解析 XML 文档中所有的文本. ...
- spring boot ----> jpa连接和操作mysql数据库
环境: centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23 1.引入jpa起步依赖和mysql驱动jar包 &l ...