Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是WPF预览活动?_Wpf_Events - Fatal编程技术网

什么是WPF预览活动?

什么是WPF预览活动?,wpf,events,Wpf,Events,我一直在寻找事件“Preview******”的描述,就像每个元素都有events KeyDown和PreviewKeyDown一样。区别是什么(不是一个是附加事件,一个不是,真正的常规区别和编程方式的区别) 在从控件派生的任何类中,都可以重写这两个方法。。OnKeyDown和OnPreviewKeyDown,现在我正在编写我的自定义控件,我应该使用哪种方法?基本上,这是同一事件,但发生在主要事件之前。它们的存在使您可以侦听这些类型的事件,而不会在这些事件发生时干扰控件的正常行为 例如,当你点击

我一直在寻找事件“Preview******”的描述,就像每个元素都有events KeyDown和PreviewKeyDown一样。区别是什么(不是一个是附加事件,一个不是,真正的常规区别和编程方式的区别)


在从控件派生的任何类中,都可以重写这两个方法。。OnKeyDown和OnPreviewKeyDown,现在我正在编写我的自定义控件,我应该使用哪种方法?基本上,这是同一事件,但发生在主要事件之前。它们的存在使您可以侦听这些类型的事件,而不会在这些事件发生时干扰控件的正常行为

例如,当你点击或鼠标点击时,按钮会做一些事情。如果你自己处理这些事件,你必须确保你做了同样的事情,否则你的按钮不会做同样的事情。预览事件在同一时间线上为您提供一个事件,而不必担心会干扰现有功能

这在处理自定义样式/触发器/控件模板时特别有用。当您开始覆盖控件外观/行为时


因此,在您的控制下,在OnKeyDown事件中执行您想要的主要工作,并将预览事件留给其他人使用,这就是我如何与他们一起工作。

我发现这篇博客文章在描述差异方面非常有用:


在可视化树中,当树中的某个元素上发生事件时,首先预览事件将从根移动到元素(隧道):所有这些元素上都将引发PreviewKeyDown事件,然后“正常”事件将从元素移动到根(冒泡)来自编程WPF-Chris Sells和Ian Griffith

除直接事件外, WPF定义了网络中的大多数路由事件 成对-一条隧道和另一条隧道 冒泡。隧道事件名称 始终以“预览”开头,并且是 首先提出。这给了父母 有机会在它之前看到这个事件 孩子的手。然后是 冒泡的对手。大多数 在这些情况下,您将只处理 冒泡的。预览将是 通常用于

  • 阻止事件(
    e.Handled=true
  • 使父级在正常事件处理之前执行某些操作
e、 g.如果UI Tree=按钮包含网格,则画布包含椭圆
单击椭圆将导致(鼠标向下按钮被按钮吃掉,而单击被提升。)


这种差异与路由事件有关,这是WPF实现其事件处理策略的方式。标准事件名称(如KeyDown等)意味着冒泡路由策略。带有“Preview”(即PreviewKeyDown等)的前缀表示隧道路由策略。您可以更详细地阅读这些策略。基本上,当调用WPF中的事件时,它首先从可视化树中最顶端的元素向下移动到调用该事件的元素,最后向上返回。在下树的过程中,您将遇到PreviewKeyDown事件,在回程中,您将遇到KeyDown事件,按顺序排列。

谢谢,我一直在MSDN中查找,但没有找到它,我看到每个人都在谈论冒泡和隧道,但这段文字到处都找不到。
PreviewMouseDownButton
PreviewMouseDownGrid
PreviewMouseDownCanvas
PreviewMouseDownEllipse
MouseDownEllipse
MouseDownCanvas
MouseDownGrid