WPF中的事件(三)- 附加事件
来源:互联网 发布:java 随机数生成 编辑:程序博客网 时间:2024/05/01 22:53
附加事件的本质也是路由事件,路由事件的宿主是Button、Grid等这些我们可以在界面上看得见的控件对象,而附加事件的宿主是Binding类、Mouse类、KeyBoard类这种无法在界面显示的类对象。附加事件的提出就是为了让这种我们无法看见的类也可以通过路由事件同其他类对象进行交流。下面我们先定义一个包含附加事件的类:
public class Student { public static readonly RoutedEvent NameChangedEvent = EventManager.RegisterRoutedEvent("NameChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Student)); public int id { get; set; } public string name { get; set; } }
可以看到,附加事件的声明和路由事件完全一样,和路由事件不同的是它并非派生自UIElement,因此没有AddHandler和RemoveHandler两个方法,且没有RaiseEvent这个方法可以激发事件,只能附加到UIElment对象上面进行激发。 搭建以下的界面:
<Window x:Class="_8_14.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid Name="gridMain"> <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="219,266,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> </Grid></Window>
我们要实现的效果时,在修改Student对象的name属性时,激发Student.NameChangedEvent事件,在界面中设置该附件事件的处理器,弹出被修改姓名的Student对象的id。
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.gridMain.AddHandler(Student.NameChangedEvent, new RoutedEventHandler(this.StudentNameChangedHandler)); } private void button1_Click(object sender, RoutedEventArgs e) { Student stu = new Student { id = 101, name = "Tim" }; stu.name = "Tom"; RoutedEventArgs args = new RoutedEventArgs(Student.NameChangedEvent, stu); this.button1.RaiseEvent(args); } private void StudentNameChangedHandler(object sender, RoutedEventArgs e) { MessageBox.Show((e.OriginalSource as Student).id.ToString()); } }
button1_Click为界面上按钮的处理事件,在这个事件中我们定义了一个Student的对象,然后修改Student对象的name属性,由于Student对象没有RaiseEvent方法,这里需要借助button1的RaiseEvent方法激发该路由事件。
在MainWindow的构造函数中,为gridMain增加了该路由事件Student.NameChangedEvent的处理器,在处理器的委托函数中,弹出该Student对象对应的id。
界面效果如下:
0 0
- WPF中的事件(三)- 附加事件
- WPF附加事件定义
- wpf的附加事件
- WPF--事件、路由事件、附加事件的区别
- WPF中的事件列表
- WPF中的路由事件
- WPF中的事件列
- WPF教程(七)XAML中的事件
- wpf中的Ctrl+S 事件(键盘组合事件)
- WPF中的事件(二)- 自定义路由事件
- WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
- WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
- WPF 中的 loaded 事件和 Initialized 事件
- WPF事件中的冒泡路由事件
- WPF 中的 loaded 事件和 Initialized 事件
- 深入浅出附加事件(转)
- WPF中的鼠标事件详解
- WPF中的鼠标事件详解
- nodejs实现,每天定时自动读取数据库数据-生成excel表格-发送给老板邮箱(promise版)
- Pix4D 入门手册
- 在ubuntu上使用swarm搭建docker集群
- hdu 1047 1042 java 大整数
- 驰骋工作流引擎衍生产品CCOA 迁移到git开源平台 公告
- WPF中的事件(三)- 附加事件
- 第2章 C#编程概述
- 类型限定符--restrict
- 基于51单片机的制冷冰箱
- 自己调用还是传入自己?——代码模拟现实中的逻辑还是不模拟?
- 关于坐标系和投影的相关知识
- viewpager的轮播图
- 搭建hadoop 2.6.0集群
- struct timeval结构体 以及 gettimeofday()函数