WPF:路由事件还是常规事件?

2024-06-23

在 WPF 中,我们有路由事件。什么时候应该使用这些来代替常规事件?


路由事件具有特殊的行为,但如果您在引发事件的元素上处理事件,则该行为在很大程度上是不可见的。

如果您使用任何建议的方案,路由事件就会变得强大:在公共根定义公共处理程序、组合您自己的控件或定义您自己的自定义控件类。

路由事件侦听器和路由事件源不需要在其层次结构中共享公共事件。任何用户界面元素 http://msdn.microsoft.com/en-us/library/system.windows.uielement.aspx or 内容元素 http://msdn.microsoft.com/en-us/library/system.windows.contentelement.aspx可以是任何路由事件的事件侦听器。因此,您可以使用整个工作 API 集中可用的全套路由事件作为概念“接口”,应用程序中的不同元素可以通过该接口交换事件信息。路由事件的这种“接口”概念特别适用于输入事件。

路由事件也可用于通过元素树进行通信,因为事件的事件数据会永久保留到路由中的每个元素。一个元素可以更改事件数据中的某些内容,并且该更改将可用于路由中的下一个元素。

除了路由方面之外,还有两个其他原因导致任何给定的 WPF 事件可能被实现为路由事件而不是标准 CLR 事件。如果您正在实施自己的活动,您还可以考虑以下原则:

  • 某些 WPF 样式和模板功能,例如事件设置者 http://msdn.microsoft.com/en-us/library/system.windows.eventsetter.aspx and 事件触发 http://msdn.microsoft.com/en-us/library/system.windows.eventtrigger.aspx要求引用的事件是路由事件。这就是前面提到的事件标识符场景。
  • 路由事件支持类处理机制,通过该机制,类可以指定静态方法,这些静态方法有机会在任何注册的实例处理程序可以访问路由事件之前处理它们。这在控件设计中非常有用,因为您的类可以强制执行事件驱动的类行为,而这些行为不会通过处理实例上的事件而意外抑制。

Source: MSDN:路由事件概述 http://msdn.microsoft.com/en-us/library/ms742806.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF:路由事件还是常规事件? 的相关文章

  • WPF 数据绑定到字符串属性

    我有一个关于数据绑定的问题 我正在努力解决这个问题 我的 xaml cs 文件中有以下属性 private string stationIdInstruction public event PropertyChangedEventHandl
  • WPF 通过宽高比调整 UserControl 的大小

    我有一个 UserControl 并且该 UserControl 必须根据宽高比调整大小 这意味着 宽度 高度 2 1 目前我正在使用这段代码 protected override Size ArrangeOverride Size arr
  • WPF 依赖项属性:为什么需要指定所有者类型?

    这就是我注册的方式DependencyProperty public static readonly DependencyProperty UserProperty DependencyProperty Register User type
  • WPF RichTextBox 中的只读 Run 元素?

    我可能完全是在想象这一点 但我可以发誓有一种方法可以使 RichTextBox 中的各个 Run 或 Parapgraph 元素成为只读 我还可以发誓 几周前我自己尝试了一种方法 并对结果感到满意 我隐约记得它看起来像这样
  • Windows 更新 KB4040972/73 导致 WPF 类出现黑色图像

    我有一个依赖于深度缩放图像 从 PNG 转换为各种比例的 JPG 金字塔 的应用程序 我们使用 DeepZoomTools dll 来实现 这依赖于PresentationCore dll 多年来一直运行良好 推出 KB4040972 和
  • ListView选择单个项目,wpf

    我有一个列表视图 它的项目源是一个列表 我希望用户只选择一项 当我将列表视图的 SelectionMode 设置为 single 时 用户仍然可以选择多个项目 并且列表视图似乎变得疯狂并选择用户未选择的项目 看起来很奇怪 任何人都知道可能是
  • 打印 WPF 位图图像

    打印位图图像的最佳方法是什么 我有 System Drawing 背景 所以我正在考虑将其转换为位图 然后打印它 但我认为可能有更好的方法 Thanks 根据 Drew 的回答 最好测量并安排传递给 PrintVisual 方法的容器 这将
  • Prism 应用程序关闭时不退出

    我正在学习棱镜 我遇到了一个问题 我制作了一款应用程序 与 Mike Taulty 制作的关于 Prism 的精彩教程中的应用程序非常相似 最大的区别是我的应用程序是 WPF 应用程序而不是 Silverlight 我发现我遇到了问题 当我
  • 良好的 WPF 或 silverlight windows 小工具示例

    有人有 WPF 或 silverlight windows 小工具的好例子吗 诺兰多02 您好 我在网上看到了一些侧边栏小工具演示和教程 我将在这里列出它们以供您审查 希望其中一些能引起您的注意 并为您的努力提供帮助 WPF http ww
  • 文本框的自定义日期格式

    有关的 将3个文本框绑定在一起 相同的日期时间不同的格式 https stackoverflow com questions 35581427 binding 3 textboxes together same datetime diffe
  • wpf C# 中的内存泄漏

    我正在使用 GalaSoft MvvmLight 套件和 WPF Toolkit 开发 WPF MVVM v3 5 中 应用程序DataGrid and DatePicker 但是 每次加载应用程序时 我都会面临应用程序中的大量内存泄漏Us
  • 如何用ListBox制作自定义控件?

    我想用自定义的项目模板制作水平ListBox 所以我制作了它的基本模板 但是 我找不到将 事物 绑定到 WPF XAML 的示例 尤其是在 ListBox 填充了自定义项的情况下 我只是想动态添加 删除列表框中的项目 其中包含图像 标签 组
  • 如何在 asp:TextBox 的 keyup 事件上调用 javascript 函数

    如何在asp net的TextBox控件的keyup事件上调用javascript函数 我正在尝试类似的事情 但它不起作用
  • 在 SVG 中旋转形状时保持旋转线性渐变不旋转

    SVG 或 WPF XAML 我对两者都持开放态度 并且需要 我不认为它们在实现上有任何不同 下面的示例是 SVG 中的 我试图找到一种在线性渐变上使用旋转的方法 在本例中为 270 但是当它填充的形状旋转时 保持线性渐变不变 就好像它填充
  • Worksheet_Change 事件未触发

    我的 Excel 项目在家中可以正常运行 带有Excel 2010 但不能在两台工作计算机上 使用Excel 2016 并且我怀疑Worksheet Change事件就是问题 当用户进行更改时 黄色条 屏幕截图中 应再次变为白色 但事实并非
  • 绑定到布尔值的可见性的 TargetNullValue

    我有一个Grid whose Visibility使用以下方法将属性绑定到某个模型的布尔属性Converter
  • C# ObservableCollection OnCollectionChanged 在项目更改时不会触发

    来自 MSDN 关于 OnCollectionChanged 的 内容 在添加 删除 更改 移动项目或刷新整个列表时发生 我正在更改附加到位于我的集合中的 obj 的属性 但 OnCollectionChanged 未触发 我正在 obj
  • 将 WPF 属性数据绑定到变量

    我有一个 WPF 4 和 VB net 2010 中的项目 我想将媒体元素的音量属性绑定到另一个模块中的变量 请注意 变量的数据类型正确 因此无需转换 我该怎么做呢 首先 确保您的后台代码实现了 INotifyPropertyChanged
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod

随机推荐

  • pdo 相对于 mysql_* 或 mysqli_* 的优点[重复]

    这个问题在这里已经有答案了 我注意到很多人正在使用或迁移到pdo 我以前从未使用过它 我真的很不愿意改变它 无论如何我仍然没有改变 但我想从使用pdo的人那里知道每天为什么我应该改变这一点 我的意思是它比 mysql 或 mysqli 有什
  • 如何静默来自 GCC 的 #pragma 消息

    我没兴趣看 pragma message适合我的构建 它只会使输出变得混乱 我顺便告诉 Clang Wno pragma messages 但是 GCC 不理解该标志 并且我找不到任何类似的标志 我如何要求 GCC 忽略 pragma me
  • 在另一个控件之前插入一个控件

    如何在 ASP NET 中动态地将一个控件插入到另一个控件之前 假设 control1 是网页上的某个控件 我想在 control1 之前动态创建并插入一个表 e g table1 new Table table1 ID Table1 但接
  • Opencart 系统/修改文件夹如何运作?

    我对 OC 2 X 很陌生 当我对网站进行更改时 我注意到它们没有出现 当我在系统 修改文件夹中进行更改时 就会出现更改 我认为这个文件夹是新的 与 vqmod 无关 我认为这是一个基本上优先于核心文件的文件 不幸的是 当我安装插件时 它也
  • Olve Maudal 的 C++ 测验背后的解释(别名模板)

    以下代码来自http www pvv org oma PubQuiz ACCU Apr2014 pdf http www pvv org oma PubQuiz ACCU Apr2014 pdf 6 第 34 页的解决方案 目标是猜测以下的
  • 抛出新的异常与 Catch 块

    以下之间是否存在行为差异 if s null s is a string throw new NullReferenceException And try Console Writeline s catch NullReferenceExc
  • HOGDescriptor 带有视频来识别物体

    不幸的是 我既是 python 又是 openCV 初学者 所以如果问题很愚蠢 请原谅我 我正在尝试使用cv2 HOGDescriptor识别视频中的物体 我关心的是逐帧识别 即没有跟踪等 这是我正在做的事情 我读了视频 目前是 mpg 通
  • PyCharm - 项目结构 - 来源与资源

    在 PyCharm 中目录可以标记为 Sources 资源 模板 Excluded 我想知道来源和资源有什么区别 我在文档中找不到有关我的问题的任何信息 有什么定义吗 来源是 来源 py 文件 资源是资产 例如 css png txt和其他
  • 如何防止Android在调用相机意图后重新启动应用程序?

    在低内存设备上 我在调用相机意图后遇到了问题 当收到活动结果时 Android 会重新启动整个应用程序 有人遇到过同样的问题吗 有什么解决办法吗 我不久前遇到了同样的问题 Android 系统在启动 Media Intent 时停止应用程序
  • 将 2D 数组的分布式块发送到 MPI 中的根进程

    我有一个 2D 数组 分布在 MPI 进程网格中 本例中为 3 x 2 进程 数组的值是在数组块分配到的进程内生成的 我想在根进程中将所有这些块收集在一起以显示它们 到目前为止 我有下面的代码 这会生成一个笛卡尔通信器 找出 MPI 进程的
  • 如何在猫鼬中获得多个结果并将其合并为一个响应

    在 API 路由 调用中 我希望有 3 个 mongoose 查询 然后组合结果以形成响应 json Query student countDocuments then stundentNumber gt return stundentNu
  • 如何编写正则表达式来匹配 Verilog 文件中的模块实例化?

    我正在开发一个项目 通过使用 perl 脚本语言来促进 verilog 编程 现在我想编写一个脚本来扫描顶级verilog文件 然后生成模块的层次结构列表 这表明我需要提取模块实例化 从verilog文件中的语句来看 问题是这样的 如何编写
  • Java 比较排序

    我有一个ArrayList of Person对象 APerson has name age and height 我的目标是解决这个问题ArrayList
  • 测试与 Rspec 的“关联”的正确方法?

    我正在尝试测试以下场景 gt 我有一个名为 Team 的模型 当它由用户创建时它才有意义 因此 每个团队实例必须与一个用户相关 为了测试这一点 我做了以下工作 describe Team do it should be associated
  • Unix grep 正则表达式包含“x”但不包含“y”

    我需要一个用于 unix grep 的单遍正则表达式 其中包含 alpha 但不包含 beta grep alpha lt gt grep v beta 这里的其他答案展示了一些可以扭曲不同种类的正则表达式来做到这一点的方法 尽管我认为答案
  • CSS 文本的宽度过渡不起作用

    我有一个 div 我想在其中显示一个人的名字 我只想在正常状态下显示该人的名字 当您将鼠标悬停时 姓氏应出现在名字的右侧 其宽度从 0 扩展到正常宽度 所有这些文本都右对齐 如果我将过渡应用于姓氏范围 它甚至不会显示 我还尝试了 max w
  • 列的总和值。循环依赖

    我不知道如何用语言表达 但我需要我所意识到的 随附的电子表格中有两张表 现在怎么样 和 应该怎么样 我在其他工作表中使用了这个公式 但现在它不能正常工作 ArrayFormula IF ROW A A 1 SUM INDIRECT D2 D
  • 在 less-loader 中导入全局变量

    在我的 webpack 配置中 我希望能够定义一个全局 less variables 文件 该文件将包含在每个 less 组件中 使用 sass loader 您可以提供以下选项 loaderOptions data import glob
  • 我需要一个 JQuery IP 掩码插件

    有没有好的 JQuery IP 掩码插件 我试过了屏蔽输入插件 http digitalbush com projects masked input plugin 但它不支持少于 12 位的 IP 地址 然后我尝试过meioMask htt
  • WPF:路由事件还是常规事件?

    在 WPF 中 我们有路由事件 什么时候应该使用这些来代替常规事件 路由事件具有特殊的行为 但如果您在引发事件的元素上处理事件 则该行为在很大程度上是不可见的 如果您使用任何建议的方案 路由事件就会变得强大 在公共根定义公共处理程序 组合您