首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WPF自学入门(三)WPF路由事件之内置路由事件

有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?...最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一)XAM基本知识中提到过两棵树,逻辑树LogicalTree 和可视化树 VisualTree,那么它们分别是什么...既然WPF中使用这样的一个设计理念,路由事件就是特别为WPF而生,它的功能就是可以把一个事件从触发点沿着树向上或者向下传播,需要对这个事件作出反应的地方就添加一个监听器,就会有相应的反应,当然,它的传递是可以用代码来停止...好了,我已经大概了解了一些路由事件。下面先来了解一下WPF内置的路由事件和原理,然后我们来创建一个属于自己的路由事件。 1、WPF内置的路由事件 新建WPF项目,在页面上放置按钮。...2、内置路由事件学习总结: 气泡事件是WPF路由事件中最为常见,它表示事件从源元素扩散传播到可视树,直到它被处理或到达根元素。这样我们就可以针对源元素的上方层级对象处理事件。

1.6K20

WPF自学入门(四)WPF路由事件之自定义路由事件

在上一篇博文中写到了内置路由事件,其实除了内置的路由事件,我们也可以进行自定义路由事件。接下来我们一起来看一下WPF中的自定义路由事件怎么进行创建吧。...创建自定义路由事件分为3个步骤: 1、声明并注册路由事件。 2、利用CLR事件包装路由事件(封装路由事件)。 3、创建可以激发路由事件的方法。...现在开始创建自定义路由事件 一、声明自定义路由事件 创建继承RoutedEventArgs类的派生类ReportCurrentLocationEventArgs用来携带时间和位置消息,ClickTime...第三个参数是路由事件处理器类型,传递的参数是自定义类。 第四个参数是拥有这个路由事件的类型。...三、封装路由事件 CLR事件的封装器,不同于依赖属性的GetValue和SetValue,这里是利用Add和Remove两个函数来给路由事件分配事件处理器。

2.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学习WPF——了解路由事件

    入门 我们先来看一个例子 前台代码: 后台代码: 点击按钮的运行效果第一个弹出窗口 第二个弹出窗口: 第三个弹出窗口: 路由事件解析 在上面的例子中我们看到了Button类的路由事件Click 下面我们来剖析源码...,看看Button是如何注册这个路由事件的 要使用路由事件,必须先定义路由事件 首先在Button类的基类ButtonBase中发现了路由事件的定义ClickEvent 代码中使用EventManager.RegisterRoutedEvent...注册了路由事件 这个方法包含事件的名称、路由类型等内容 定义了ClickEvent事件之后还需要对事件进行封装这里使用到了.Net的事件封装器,AddHandler和RemoveHandler用于添加和删除已注册的调用程序...修改记录 2015-1-5:完成一部分内容 2015-1-14:完成全部内容 参考资料 《Pro WPF 4.5 in C# 4th Edition》 http://www.cnblogs.com

    61070

    WPF路由事件:路由事件的三种策略

    一、什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件。路由事件是一个CLR事件。...路由事件的路由策略: 所谓的路由策略就是指:路由事件实现遍历元素的方式。 路由事件一般使用以下三种路由策略:1) 冒泡:由事件源向上传递一直到根元素。2) 直接:只有事件源才有机会响应事件。...一般情况下,WPF提供的输入事件都是以隧道/冒泡对实现的。隧道事件常常被称为Preview事件。...XAML代码如下; <Window x:Class="<em>Wpf</em><em>路由</em>事件管道策略.MainWindow" xmlns="http://schemas.microsoft.com/winfx/...System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace <em>Wpf</em>

    1.4K10

    WPF开源项目:WPF-ControlBase

    WPF中应用MVC 原文标题:封装:简要介绍自定义开发基于WPF的MVC框架 原文链接:https://blog.csdn.net/u010975589/article/details/100019431...代码地址:https://github.com/HeBianGu/WPF-ExplorerManager.git 5....应用此框架的其他示例: 示例:应用WPF开发的仿制GitHub客户端UI布局_HeBianGu的博客-CSDN博客 示例:应用WPF开发的仿制百度网盘客户端UI布局_HeBianGu的博客-CSDN博客..._wpf 网盘 示例:应用WPF绘制轻量Chart图表之组合图效果预览_HeBianGu的博客-CSDN博客 封裝:WPF基于Vlc.DotNet.Wpf封装的视频播放器_HeBianGu的博客-CSDN...- HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库 安装包示例下载地址: 链接:https://pan.baidu.com/s/1y2UfDKIxoSOffj36gl7fOw

    3.5K10

    WPF依赖属性(wpf 依赖属性)

    依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。 将所有的属性都设置为依赖属性并不总是正确的解决方案,具体取决于其应用场景。有时,使用私有字段实现属性的典型方法便能满足要求。...希望使用已建立的、WPF 进程也使用的元数据约定,例如报告更改属性值时是否要求布局系统重新编写元素的可视化对象。...二、依赖属性的特点 1、属性变更通知 无论什么时候,只要依赖属性的值发生改变,wpf就会自动根据属性的元数据触发一系列的动作,这些动作可以重新呈现UI元素,也可以更新当前的布局,刷新数据绑定等等,这种变更的通知最有趣的特点之一就是属性触发器...属性在内存的使用上是截然不同的,每个CLR属性都包含一个非static的字段,因此当我们实例化一个类型的时候,就会创建该类型所拥有的所有CLR属性,也就是说一个对象所占用的内存在调用new操作进行实例化的时候就已经决定了、而wpf...1、在当前项目里面添加一个WPF版的用户控件,命名为“MyDependencyProperty”,在MyDependencyProperty.xaml.cs文件里面自定义一个依赖属性: 1 using

    2.1K20

    WPF开源项目:WPF-ControlBase

    WPF中应用MVC 原文标题:封装:简要介绍自定义开发基于WPF的MVC框架 原文链接:https://blog.csdn.net/u010975589/article/details/100019431...代码地址:https://github.com/HeBianGu/WPF-ExplorerManager.git 5....应用此框架的其他示例: 示例:应用WPF开发的仿制GitHub客户端UI布局_HeBianGu的博客-CSDN博客 示例:应用WPF开发的仿制百度网盘客户端UI布局_HeBianGu的博客-CSDN博客..._wpf 网盘 示例:应用WPF绘制轻量Chart图表之组合图效果预览_HeBianGu的博客-CSDN博客 封裝:WPF基于Vlc.DotNet.Wpf封装的视频播放器_HeBianGu的博客-CSDN...- HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库 安装包示例下载地址: 链接:https://pan.baidu.com/s/1y2UfDKIxoSOffj36gl7fOw

    3.5K30

    学习WPF——了解WPF中的XAML

    XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如映射为WPF的Button对象...Grid元素可以嵌套Button元素 了解XAML VisualStudio创建一个窗口,默认情况下产生的代码如下: 这段代码中包含两个标记元素,一个是Window,一个是Grid Window是WPF...如果我们在第三方组件中定义了Window类,如果没有一个名称空间做限定的话, 编译器不知道我们将使用哪个Window类型来渲染窗口 我们在上面的代码中,看到了两个名称空间,一个是WPF核心名称空间、...一个是XAML名称空间 WPF核心名称空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation 包含所有WPF类,包含用来构建用户界面的控件...中附加属性多用于布局 修改记录 2015-1-5:完成全部内容 参考资料 《Pro WPF 4.5 in C# 4th Edition》 MSDN 备注 本篇只简单介绍了XAML

    1.9K70

    Vue路由详解(路由基础,路由轮播,路由传参,通配符路由)

    Vue路由基础知识点: 1.router-view: 类似angular里的插座,用于承载路由的切换组件 2.router-link: 类似angular里的routerLink,区别是:vue的router-link...是一个组件,直接充当a标签使用.但是在最后渲染时,vue还是会将其渲染成a标签 3.routes: 数组,用来做路由信息的配置 4.router: 对象,通过该对象的方法实现路由的跳转,例如按钮点击实现跳转.../home: routes: [ //路由重定向 {path:'/',redirect:'/home'}, ] 二级路由重定向 二级路由的注意点: 子路由里的path时基于mine的,...不要加 / ,加了 / 就是基于跟路由的 a....//子路由里的path时基于mine的,不要加 / ,加了 / 就是基于跟路由的 //二级路由的重定向 {path:'',redirect: {path:'account

    3.1K21

    WPF --- 如何重写WPF原生控件样式?

    引言 上一篇中 WPF --- 重写圆角DataGrid样式,因新产品UI需要,重写了一下微软 「WPF」 原生的 DataGrid 的样式,包含如下内容: 基础设置,一些基本背景色,字体颜色等。...重写过程中,遇到了两个问题: 如何获取 「WPF」 原生的 DataGrid 的样式? 滚动条样式中,如何固定滚动条长度? 本篇文章分享一下这两个问题的解决办法。...问题1 第一个,如何获取 「WPF」 原生的 DataGrid 的样式?...比如 ComboBox 控件,我刚开始学习WPF时的时候,我就不理解这个是怎么实现的,我后来还是通过查询微软官方文档 [1]ComboBox Styles and Templates ,文档里给出了...「第一步:」 使用 Blend 创建一个 WPF 项目,在窗体中添加一个 ComboBox 。

    46520

    WPF开源项目:AIStudio.Wpf.AClient

    介绍 Wpf客户端,AIStudio.Wpf.AClient 软件架构 本框架使用Prism做MVVM,优点咱就不说了,主要了容器注入,消息和DI,比自己写省很多事。...我在其基础上增加了一些功能, 网页客户端浏览地址(账号密码:Admin,Admin): http://121.36.12.76:5001/ 接口浏览地址http://121.36.12.76:5000/ Wpf...客户端下载可以直接运行,默认配置文件 AIStudio.Wpf.Client.exe.Config <add key="Title" value="AIStudio"...: 系统管理 登录界面 主窗口 用户管理 角色管理 权限管理 消息中心 站内消息 特色功能:流程管理 流程管理 发起流程 表单管理 大家可关注作者gitee账号,还有其他项目,比如:WPF...-wpf.-diagram 上该项目几个截图结束本文: 画板编辑 流程图 逻辑图

    1.4K20

    学习WPF——WPF布局——了解布局容器

    WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有子元素,并询问子元素所期望的尺寸 排列阶段,容器在合适的位置放置子元素,并设置元素的最终尺寸 这是一个递归的过程...,界面中任何一个容器元素都会被遍历到 WPF布局容器的继承机制 ?...DispatcherObject WPF应用程序使用单线程亲和模型(STA:Single-Thread Affinity),这意味着整个用户界面都为单个线程拥有,同时也意味着从另一个线程与用户界面元素交互是不安全的...WPF有一个统一的机制来处理这些问题,这个我们在后续的章节涉及到之后再深入讲解,大家只要知道,只要继承DispatcherObject的界面元素就能很方便的处理这些问题就好啦 DependencyObject...Visual WPF程序中的所有可视化元素基本上都是继承自Visual类,这个类封装了绘图指令和附加的绘图细节(比如透明和裁剪等),如果你不想用WPF的界面元素,更希望使用一个轻量级的绘图API,那么你可以直接对

    2.3K50

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券