using System.Windows;

namespace 路由事件2
{
public class Student
{
////声明并定义路由事件
//public static readonly RoutedEvent NameChangedEvent =
// EventManager.RegisterRoutedEvent("NameChanged",
// RoutingStrategy.Bubble,
// typeof(RoutedEventHandler),
// typeof(Student)); private int id; public int Id
{
get { return id; }
set { id = value; }
}
private string name; public string Name
{
get { return name; }
set { name = value; }
}
}
}
<Window x:Class="路由事件2.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 x:Name="testGrid">
<Button x:Name="btnTest" Content="ok" Width="80" Height="75" FontSize="18" Click="btnTest_Click"/>
</Grid>
</Window>
using System.Windows;

namespace 路由事件2
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
//声明并定义路由事件
public static readonly RoutedEvent NameChangedEvent =
EventManager.RegisterRoutedEvent("NameChanged",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(MainWindow)); public MainWindow()
{
InitializeComponent(); //为grid添加路由事件侦听器
this.testGrid.AddHandler(NameChangedEvent, new RoutedEventHandler(StudentNameChangeEvent));
} private void btnTest_Click(object sender, RoutedEventArgs e)
{
Student stu = new Student()
{
Id = 1,
Name = "name001"
}; stu.Name = "name007"; //准备事件消息并发送路由事件
RoutedEventArgs arg = new RoutedEventArgs(NameChangedEvent, stu);
//RaiseEvent用于触发路由事件
this.btnTest.RaiseEvent(arg);
} public void StudentNameChangeEvent(object sender, RoutedEventArgs e)
{
MessageBox.Show("Id==" + (e.OriginalSource as Student).Id.ToString()
+ "\n"
+ "name==" + (e.OriginalSource as Student).Name.ToString());
}
}
}

实例二:

<Window x:Class="路由事件3.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 x:Name="testGrid">
<Button x:Name="btnTest" Content="ok" Width="80" Height="75" FontSize="18" Click="btnTest_Click"/>
</Grid>
</Window>
using System.Windows;

namespace 路由事件3
{
public class Student
{
//声明并定义路由事件
public static readonly RoutedEvent NameChangedEvent = EventManager.RegisterRoutedEvent
("NameChange",RoutingStrategy.Bubble,typeof(RoutedEventHandler),typeof(Student)); //为界面元素添加路由侦听器
public static void AddNameChangedHandler(DependencyObject d,RoutedEventHandler h)
{
UIElement e = d as UIElement;
if (e != null) e.AddHandler(Student.NameChangedEvent, h);
} //移除侦听
public static void RemoveNameChangedHandler(DependencyObject d, RoutedEventHandler h)
{
UIElement e = d as UIElement;
if (e != null) e.RemoveHandler(Student.NameChangedEvent, h);
} private int id;
public int Id
{
get { return id; }
set { id = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
} using System.Windows; namespace 路由事件3
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); //为外层Grid添加路由事件侦听器
Student.AddNameChangedHandler(this.testGrid,new RoutedEventHandler(NameChangedEvent));
} public void NameChangedEvent(object sender,RoutedEventArgs e)
{
MessageBox.Show("Id==" + (e.OriginalSource as Student).Id.ToString()
+ "\n"
+ "name==" + (e.OriginalSource as Student).Name.ToString());
} private void btnTest_Click(object sender, RoutedEventArgs e)
{
Student stu = new Student()
{
Id = 1,
Name = "001"
}; stu.Name = "002"; //准备事件消息并发送路由事件
RoutedEventArgs arg = new RoutedEventArgs(Student.NameChangedEvent, stu);
this.btnTest.RaiseEvent(arg);
}
}
}

WPF Demo18 路由事件的更多相关文章

  1. WPF - 善用路由事件

    原文:WPF - 善用路由事件 在原来的公司中,编写自定义控件是常常遇到的任务.但这些控件常常拥有一个不怎么好的特点:无论是内部还是外部都没有使用路由事件.那我们应该怎样宰自定义控件开发中使用路由事件 ...

  2. WPF的路由事件、冒泡事件、隧道事件(预览事件)

    本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所 ...

  3. WPF:自定义路由事件的实现

    路由事件通过EventManager,RegisterRoutedEvent方法注册,通过AddHandler和RemoveHandler来关联和解除关联的事件处理函数:通过RaiseEvent方法来 ...

  4. 学习WPF——了解路由事件

    入门 我们先来看一个例子 前台代码: 后台代码: 点击按钮的运行效果第一个弹出窗口 第二个弹出窗口: 第三个弹出窗口: 说明 当点击按钮之后,先触发按钮的click事件,再上查找,发现stackpan ...

  5. 【WPF】路由事件

    总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...

  6. 迟到的 WPF 学习 —— 路由事件

    1. 理解路由事件:WPF 通过事件路由(event routing)概念增强了传统的事件执行的能力和范围,允许源自某个元素的事件由另一个元素引发,例如,事件路由允许工具栏上的一个按钮点击的事件在被代 ...

  7. WPF自定义路由事件(二)

    WPF中的路由事件 as U know,和以前Windows消息事件区别不再多讲,这篇博文中,将首先回顾下WPF内置的路由事件的用法,然后在此基础上自定义一个路由事件. 1.WPF内置路由事件 WPF ...

  8. WPF中路由事件的传播

    路由事件(RoutedEvent)是WPF中新增的事件,使用起来与传统的事件差别不大, 但传播方式是完全不同的. 路由事件的传播方式 通过RoutingStrategy来定义传播的方式 public ...

  9. WPF 冒泡路由事件

    在WPF中,例如,可以构建一个包含图形的按钮,创建一个具有文本和图片混合内容的标签,或者为了实现滚动或折叠的显示效果在一个特定的容器中放置内容.甚至可以多此重复嵌套,直到达到您所希望的层次深度. 这种 ...

随机推荐

  1. 【转】IPV6的地址类型

    http://blog.sina.com.cn/s/blog_8d795a0f01018hiz.html <IPV6的地址类型>IPV6的地址类型 可分为三大类: 1.单播地址 2.组播地 ...

  2. 1.4 Chrome浏览器

    1.4 Chrome浏览器 前言selenium2启动Chrome浏览器是需要安装驱动包的,但是不同的Chrome浏览器版本号,对应的驱动文件版本号又不一样,如果版本号不匹配,是没法启动起来的. ## ...

  3. Seaweedfs-启动脚本

    #!/bin/bash if [ ! -e /sunlight/shell/main.sh ];then echo " [ Error ] file /sunlight/shell/main ...

  4. shell 脚本中将输出内容赋值给一个变量时的换行问题

    for ((i=0; i<4; i++) do ....... done 如果使用 echo $a 输出变量,则变量中的 换行都会被忽略掉,所有内容输出到一行 而使用 echo "$a ...

  5. P2216 [HAOI2007]理想的正方形(dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表 ...

  6. ROI-Align解决方案

    https://yq.aliyun.com/articles/558181 Mask R-CNN与Faster R-CNN相似,Faster R-CNN是two-stage的,其中第一个stage是R ...

  7. SSAS aggregation 的作用及其使用

    作用: 聚合是为了解决查询在运行时的效率低下,在数据立方体部署的时候进行聚合,实际上是对数据立方体的预处理,方便以后查询.如若在部署时未进行聚合,则在以后每次查询时实际上都会进行一次集合的操作,等待结 ...

  8. 高斯消元 o(n^3) 取摸和不取摸

    #include<bits/stdc++.h> using namespace std; ; int a[MAXN][MAXN];//增广矩阵 int x[MAXN];//解集 bool ...

  9. Spring Boot 揭秘

    SpringBoot基础 微服务 解决大一统的服务化架构的问题 代码冲突问题 交付复杂,影响面大 测试困难 微服务的好处 可扩展性 隔离性 灵活性,多语言多技术生态 微服务的挑战 保持微服务的互通性 ...

  10. jdk1.8新特性----接口可以有方法体,子类可以不用重写接口中已实现的方法

    是的这就是jdk1.8新特性之一,刚刚看到. 注意:编译环境是1.8. public interface Tree { public static String name="树名" ...