首页 > 代码库 > 自定义路由事件
自定义路由事件
首先自定义事件支持事件路由,需要使用 RegisterRoutedEvent 方法注册 RoutedEvent
C#语法
public static RoutedEvent RegisterRoutedEvent( string name, RoutingStrategy routingStrategy, Type handlerType, Type ownerType)
参数
- name
- 类型:System.String 路由事件的名称。该名称在所有者类型中必须是唯一的,并且不能为 null 或空字符串。
- routingStrategy
- 类型:System.Windows.RoutingStrategy 作为枚举值的事件的路由策略。
- handlerType
- 类型:System.Type 事件处理程序的类型。该类型必须为委托类型,并且不能为 null。
- ownerType
- 类型:System.Type 路由事件的所有者类类型。该类型不能为 null。
下面我们通过示例展示自定义路由事件:
先看下xaml文件,我们可以看到button中并没有click事件
<Window x:Class="简单自定义路由事件.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> <Button Content="获取时间" Height="29" HorizontalAlignment="Left" Margin="192,170,0,0" Name="button1" VerticalAlignment="Top" Width="100" /> <TextBox Height="58" HorizontalAlignment="Left" Margin="89,80,0,0" Name="textBox1" VerticalAlignment="Top" Width="339" /> <Label Content="自定义路由事件演示" Height="38" HorizontalAlignment="Left" Margin="141,26,0,0" Name="label1" VerticalAlignment="Top" Width="208" FontSize="22" Background="BlanchedAlmond" /> </Grid></Window>
后台代码简单展示:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace 简单自定义路由事件{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.button1.AddHandler(Button.ClickEvent,//处理的事件 new RoutedEventHandler(RoutedEvent)); //事件委托 this.MEvent += new RoutedEventHandler(MainWindow_MEvent); } void MainWindow_MEvent(object sender, RoutedEventArgs e) { this.textBox1.Text = System.DateTime.Now.ToString(); } private static readonly RoutedEvent MyEvent = EventManager.RegisterRoutedEvent("Event",//路由事件的名称 RoutingStrategy.Direct,//事件的路由策略 typeof(RoutedEvent), //事件处理程序的类型。该类型必须为委托类型 typeof(RoutedEventArgs));//路由事件的所有者类类型 //事件访问器,进行事件提供添加和移除。 public event RoutedEventHandler MEvent { add { AddHandler(MyEvent, value); } remove { RemoveHandler(MyEvent, value); } } void RoutedEvent(object o, RoutedEventArgs e) { //关联路由事件 RoutedEventArgs args = new RoutedEventArgs(MyEvent); this.RaiseEvent(args); } }}
效果展示:
上面详细的说明建自定义路由事件的基本原理的原理,我们可以通过这样的方式来实现自己的路由事件,这样的代码移致性很高,我们可以需要的时候直接移植.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。