当前位置: 首页 > news >正文

昆山网站建设详细方案网站建设策划书的心得

昆山网站建设详细方案,网站建设策划书的心得,网店运营报告,上海市建设网站一、目的:在WPF中如何注册控件级全局事件和应用程序级全局事件 二、实现 应用程序级全局事件 //注册应用程序级全局事件 EventManager.RegisterClassHandler(typeof(Button), Button.ClickEvent, new RoutedEventHandler(ic_event_Click)); 如上代码既会注册全局…

一、目的:在WPF中如何注册控件级全局事件和应用程序级全局事件


二、实现

应用程序级全局事件

//注册应用程序级全局事件
EventManager.RegisterClassHandler(typeof(Button), Button.ClickEvent, new RoutedEventHandler(ic_event_Click));

如上代码既会注册全局Button的Click事件,在任意位置点击Button既会触发注册的事件,但这种方式作用范围过大,对于有些业务来说这种方式会照成资源和性能上的浪费,本文将主要介绍空间级别的全局事件,这对于某功能来说既可以实现特殊的业务,也可以有效的控制性能。

控件级全局事件

比如有一个ItemsControl控件,绑定了一个集合,集合里面有很多Button操作的按钮,我们想要注册这些按钮的Click操作,这时需要用到控件级别的全局Button的Click事件。代码如下:

            <ItemsControl ItemsSource="{h:GetStudents}"><ItemsControl.ItemTemplate><DataTemplate><Button Content="{Binding Name}"/></DataTemplate></ItemsControl.ItemTemplate></ItemsControl>

 主要实现方式有两种:

1> 在Xaml中实现
            <ItemsControl x:Name="ic_event" ButtonBase.Click="ItemsControl_Button_Click" ItemsSource="{h:GetStudents}"><ItemsControl.ItemTemplate><DataTemplate><Button Content="{Binding Name}"/></DataTemplate></ItemsControl.ItemTemplate></ItemsControl>
        private void ItemsControl_Button_Click(object sender, RoutedEventArgs e){if (e.OriginalSource is Button button)MessageBox.Show(button.Content?.ToString());}

 可以看到直接在ItemsControl上注册Button.Click事件即可实现该效果,此时当点击控件中任意Button时会触发该事件

2>在代码中实现
//在代码中注册控件级全局事件
this.ic_event.AddHandler(Button.ClickEvent, new RoutedEventHandler(ItemsControl_Button_Click));

在代码中实现也比较简单,只需应用AddHandler方法注册一个Button.ClickEvent即可实现

总结

1、通过这种方式可以解决部分特殊业务,如上述示例中,可以注册控件内所有按钮点击事件而不需要对每个按钮单独做处理;

2、不仅仅局限Button.Click事件,任何路由事件和附加事件均可通过上述方式实现;

3、可以实现没有暴露出来的鼠标,键盘,触摸板等应用附加事件定义的功能进行注册,如:

            <ItemsControl x:Name="ic_event" Mouse.GotMouseCapture="ic_event_GotMouseCapture" ItemsSource="{h:GetStudents}"><ItemsControl.ItemTemplate><DataTemplate><Button Content="{Binding Name}"/></DataTemplate></ItemsControl.ItemTemplate></ItemsControl>

 ItmsControl没有暴露GotMouseCapture事件,可以通过Mouse.GotMouseCapture去注册该事件

三、效果

需要了解的知识点 

EventManager Class (System.Windows) | Microsoft Learn

EventManager.RegisterClassHandler 方法 (System.Windows) | Microsoft Learn

ButtonBase.Click 事件 (System.Windows.Controls.Primitives) | Microsoft Learn

UIElement.AddHandler 方法 (System.Windows) | Microsoft Learn

UIElement.RemoveHandler(RoutedEvent, Delegate) Method (System.Windows) | Microsoft Learn

Mouse 类 (System.Windows.Input) | Microsoft Learn

Keyboard 类 (System.Windows.Input) | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

控件库 - WPF .NET Framework | Microsoft Learn

WPF 介绍 | Microsoft Learn

XAML概述 - WPF .NET | Microsoft Learn

Windows Presentation Foundation 简介 - WPF .NET | Microsoft Learn

使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn

源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

了解更多

适用于 .NET 8 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

适用于 .NET 7 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

欢迎使用 Expression Blend | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

http://www.yayakq.cn/news/510641/

相关文章:

  • php网站开发路线室内装修设计图片欣赏
  • asp网站整站下载器wordpress 解压
  • 微信网站平台怎么建立响应式网站模板 金融
  • 站长工具2023最新国产业绩统计网站开发
  • 做拆分盘网站做网站看什么书好
  • 宜昌市高新区建设局网站网上视频教程怎么制作
  • 山西网站开发培训php做一个网站
  • 网站建设公司专业网站开发需求买网站主机
  • 种子网站开发多少钱淘宝店做网站建设不能开直通车
  • 大连专业网站设计服务商抓取关键词的软件
  • 小米企业网站的优化建议国内专业网站建设
  • 3合一网站怎么做网站建设评审标准
  • 青岛开发区网站制作站开发技术培训
  • 做竞价的网站需要做外部链接吗怎么开发游戏
  • 贸易网站建设公司做个人网站到哪里做
  • 请网站制作公司费用二维码图片生成器在线制作
  • 门户网站安全建设dns服务器 域名不存在时 跳转到指定网站
  • 足彩网站怎样做推广中山免费建网站
  • 网站营销 海外国外设计搜索网站
  • 朔州网站建设价格低泰安房产信息网官网
  • 企业手机微网站系统php北京海淀区区号
  • 江苏网站推广公司哪家好福州建站模板
  • 电子商务网站建设自建团队深圳网站优化公司哪家好
  • 成都网站建设木木科技辽宁省城乡建设网站
  • 网站 被刷流量中山网站建设文化报价
  • 腾讯云域名备案需要提供网站建设方案书做印刷网站公司哪家好
  • 手机网站开发还是调用安平县建设局网站
  • 郴州建设公司网站asp wordpress
  • 佛山伦教网站设计明天上海全面封控
  • 山西省财政厅门户网站三基建设长沙好的做网站品牌