【WPF】附加事件
创始人
2024-03-16 08:05:35
0

【WPF】附加事件

  • 什么是附加事件
  • 附加事件用法
  • Microsoft 官方文档
  • 附加事件案例
    • 定义自定义控件
    • 注册使用附加事件

什么是附加事件

Microsoft 官方概述:
  附加事件可用于在非元素类中定义新的 路由事件 ,并在树中的任何元素上引发该事件。 为此,必须将附加事件注册为路由事件,并提供支持附加事件功能的特定 支持代码 。 由于附加事件注册为路由事件,因此在元素树中引发时,它们会传播到元素树中。

简单来说就是,可以进行附加操作的事件,必须为路由事件RoutedEvent)。

附加事件用法

  在 XAML 语法中,附加事件由其 事件名称所有者 类型指定,格式为 .。 由于事件名称使用其所有者类型的名称进行限定,因此语法允许事件附加到任何可以实例化的元素。 此语法也适用于附加到事件路由中任意元素的常规路由事件的处理程序。

Microsoft 官方文档

这里简略的借用文档中的说明,详细学习请以文档为准:附加事件概述 (WPF .NET)

附加事件案例

定义自定义控件

using System.Windows;
using System.Windows.Controls;namespace assembly
{/// /// 按照步骤 1a 或 1b 操作,然后执行步骤 2 以在 XAML 文件中使用此自定义控件。////// 步骤 1a) 在当前项目中存在的 XAML 文件中使用该自定义控件。/// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根/// 元素中://////     xmlns:MyNamespace="clr-namespace:assembly"///////// 步骤 1b) 在其他项目中存在的 XAML 文件中使用该自定义控件。/// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根/// 元素中://////     xmlns:MyNamespace="clr-namespace:assembly;assembly=assembly"////// 您还需要添加一个从 XAML 文件所在的项目到此项目的项目引用,/// 并重新生成以避免编译错误://////     在解决方案资源管理器中右击目标项目,然后依次单击///     “添加引用”->“项目”->[浏览查找并选择此项目]///////// 步骤 2)/// 继续操作并在 XAML 文件中使用控件。//////     ////// public class MessagePopup : UserControl{public static readonly DependencyProperty BusinessTypeProperty =DependencyProperty.Register(nameof(BusinessType), typeof(string), typeof(MessagePopup), new PropertyMetadata(string.Empty));/// /// 业务类型/// public string BusinessType{get { return (string)GetValue(BusinessTypeProperty); }set { SetValue(BusinessTypeProperty, value); }}public static readonly DependencyProperty SecondsProperty =DependencyProperty.Register(nameof(Seconds), typeof(string), typeof(MessagePopup), new PropertyMetadata(string.Empty));/// /// 秒数/// public string Seconds{get { return (string)GetValue(SecondsProperty); }set { SetValue(SecondsProperty, value); }}static MessagePopup(){DefaultStyleKeyProperty.OverrideMetadata(typeof(MessagePopup), new FrameworkPropertyMetadata(typeof(MessagePopup)));}}
}
  • 自定义控件样式

下面的样式使用 ControlTemplate 自定义的控件样式,其中的 Button 按钮是不能进行事件绑定的,当然命令绑定也是不行的。



  • 效果

在这里插入图片描述

注册使用附加事件

使用该自定义控件时,为其注册 Button.Click 事件,属于原生路由事件。对应其用方法可以得出,该事件触发的是 Button 元素的 Click 事件。

简单来说就是,只有自定义控件中的 Button 元素才能触发当前的 Click 事件。(附加事件用法)

StaticResource popup}"Visibility="Visible" />

元素树中声明了两个 Buuton 这里暂且通过 Button 的 Tag 值来区分,不仅限于 Tag。

private void popup_Click(object sender, RoutedEventArgs e)
{string tag = (string)((FrameworkElement)e.OriginalSource).Tag;if (tag == "0"){MessageBox.Show("是关闭按钮");//CloseTimer();}else if (tag == "1"){MessageBox.Show("是跳转按钮");}
}
  • 效果

在这里插入图片描述

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...