什么是WPF预览活动?
我一直在寻找事件“Preview******”的描述,就像每个元素都有events KeyDown和PreviewKeyDown一样。区别是什么(不是一个是附加事件,一个不是,真正的常规区别和编程方式的区别)什么是WPF预览活动?,wpf,events,Wpf,Events,我一直在寻找事件“Preview******”的描述,就像每个元素都有events KeyDown和PreviewKeyDown一样。区别是什么(不是一个是附加事件,一个不是,真正的常规区别和编程方式的区别) 在从控件派生的任何类中,都可以重写这两个方法。。OnKeyDown和OnPreviewKeyDown,现在我正在编写我的自定义控件,我应该使用哪种方法?基本上,这是同一事件,但发生在主要事件之前。它们的存在使您可以侦听这些类型的事件,而不会在这些事件发生时干扰控件的正常行为 例如,当你点击
在从控件派生的任何类中,都可以重写这两个方法。。OnKeyDown和OnPreviewKeyDown,现在我正在编写我的自定义控件,我应该使用哪种方法?基本上,这是同一事件,但发生在主要事件之前。它们的存在使您可以侦听这些类型的事件,而不会在这些事件发生时干扰控件的正常行为 例如,当你点击或鼠标点击时,按钮会做一些事情。如果你自己处理这些事件,你必须确保你做了同样的事情,否则你的按钮不会做同样的事情。预览事件在同一时间线上为您提供一个事件,而不必担心会干扰现有功能 这在处理自定义样式/触发器/控件模板时特别有用。当您开始覆盖控件外观/行为时
因此,在您的控制下,在OnKeyDown事件中执行您想要的主要工作,并将预览事件留给其他人使用,这就是我如何与他们一起工作。我发现这篇博客文章在描述差异方面非常有用:
在可视化树中,当树中的某个元素上发生事件时,首先预览事件将从根移动到元素(隧道):所有这些元素上都将引发PreviewKeyDown事件,然后“正常”事件将从元素移动到根(冒泡)来自编程WPF-Chris Sells和Ian Griffith 除直接事件外, WPF定义了网络中的大多数路由事件 成对-一条隧道和另一条隧道 冒泡。隧道事件名称 始终以“预览”开头,并且是 首先提出。这给了父母 有机会在它之前看到这个事件 孩子的手。然后是 冒泡的对手。大多数 在这些情况下,您将只处理 冒泡的。预览将是 通常用于
- 阻止事件(
)e.Handled=true
- 使父级在正常事件处理之前执行某些操作
单击椭圆将导致(鼠标向下按钮被按钮吃掉,而单击被提升。)
这种差异与路由事件有关,这是WPF实现其事件处理策略的方式。标准事件名称(如KeyDown等)意味着冒泡路由策略。带有“Preview”(即PreviewKeyDown等)的前缀表示隧道路由策略。您可以更详细地阅读这些策略。基本上,当调用WPF中的事件时,它首先从可视化树中最顶端的元素向下移动到调用该事件的元素,最后向上返回。在下树的过程中,您将遇到PreviewKeyDown事件,在回程中,您将遇到KeyDown事件,按顺序排列。谢谢,我一直在MSDN中查找,但没有找到它,我看到每个人都在谈论冒泡和隧道,但这段文字到处都找不到。
PreviewMouseDownButton
PreviewMouseDownGrid
PreviewMouseDownCanvas
PreviewMouseDownEllipse
MouseDownEllipse
MouseDownCanvas
MouseDownGrid